Avoid to count child threads
authorJosé Bollo <jose.bollo@iot.bzh>
Tue, 4 Apr 2017 13:04:21 +0000 (15:04 +0200)
committerJosé Bollo <jose.bollo@iot.bzh>
Tue, 4 Apr 2017 13:04:21 +0000 (15:04 +0200)
The count of allowed threads must be the real
count of threads started.

Change-Id: Iaefc9fa4368042d6db45ed3333f9591da027b2f0
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
src/jobs.c

index cf1bb55..fa94ef1 100644 (file)
@@ -298,14 +298,15 @@ static void thread_run(volatile struct thread *me)
        me->lowered = 0;
        me->waits = 0;
        me->upper = current;
-       if (current)
+       if (current) {
                current->lowered = 1;
-       else
+       } else {
+               started++;
                sig_monitor_init_timeouts();
-       current = (struct thread*)me;
+       }
        me->next = threads;
        threads = (struct thread*)me;
-       started++;
+       current = (struct thread*)me;
 
        NOTICE("job thread starting %d(/%d) %s", started, allowed, me->upper ? "child" : "parent");
 
@@ -359,16 +360,17 @@ static void thread_run(volatile struct thread *me)
        NOTICE("job thread stoping %d(/%d) %s", started, allowed, me->upper ? "child" : "parent");
 
        /* unlink the current thread and cleanup */
-       started--;
        prv = &threads;
        while (*prv != me)
                prv = &(*prv)->next;
        *prv = me->next;
        current = me->upper;
-       if (current)
+       if (current) {
                current->lowered = 0;
-       else
+       } else {
                sig_monitor_clean_timeouts();
+               started--;
+       }
 }
 
 /**