]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
check value of "done"
authorAlan T. DeKok <aland@freeradius.org>
Sat, 26 Nov 2016 22:01:27 +0000 (17:01 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Sat, 26 Nov 2016 22:01:27 +0000 (17:01 -0500)
src/util/schedule.c

index 29ace96735538b4704f0d28d24ce3557c73e4829..e5cc0b7701834977a0762d6095d20b8e17e50045 100644 (file)
@@ -371,6 +371,7 @@ fr_schedule_t *fr_schedule_create(TALLOC_CTX *ctx, int max_inputs, int max_worke
  */
 int fr_schedule_destroy(fr_schedule_t *sc)
 {
+       bool done = false;
        fr_schedule_worker_t *sw;
 
        sc->running = false;
@@ -391,7 +392,6 @@ int fr_schedule_destroy(fr_schedule_t *sc)
         *      underneath the workers!
         */
        while (sem_wait(&sc->semaphore) == 0) {
-               bool done = false;
 
                /*
                 *      Needs to be done in a lock for thread safety.
@@ -399,6 +399,8 @@ int fr_schedule_destroy(fr_schedule_t *sc)
                PTHREAD_MUTEX_LOCK(&sc->mutex);
                done = (sc->num_workers_exited == 0);
                PTHREAD_MUTEX_UNLOCK(&sc->mutex);
+
+               if (done) break;
        }
 
        sem_destroy(&sc->semaphore);