]> code.citadel.org Git - citadel.git/commitdiff
Decrement num_workers when exiting worker_thread() under _any_ circumstances.
authorArt Cancro <ajc@citadel.org>
Mon, 21 Mar 2011 15:02:19 +0000 (11:02 -0400)
committerArt Cancro <ajc@citadel.org>
Mon, 21 Mar 2011 15:02:19 +0000 (11:02 -0400)
This allows system shutdown to proceed normally.

citadel/sysdep.c
citadel/threads.c

index 0e674eba85faaa159116181f282055eaff9dece1..e5dde65c598243794dfc68768326e8519f2e1cc1 100644 (file)
@@ -1194,6 +1194,7 @@ do_select:        force_purge = 0;
                        retval = select(highest + 1, &readfds, NULL, NULL, &tv);
                }
                else {
+                       --num_workers;
                        return NULL;
                }
 
@@ -1211,12 +1212,18 @@ do_select:      force_purge = 0;
                                continue;
                        } else {
                                syslog(LOG_DEBUG, "Interrupted select()\n");
-                               if (server_shutting_down) return(NULL);
+                               if (server_shutting_down) {
+                                       --num_workers;
+                                       return(NULL);
+                               }
                                goto do_select;
                        }
                }
                else if (retval == 0) {
-                       if (server_shutting_down) return(NULL);
+                       if (server_shutting_down) {
+                               --num_workers;
+                               return(NULL);
+                       }
                }
 
                /* It must be a client socket.  Find a context that has data
index 20f852168061e77829983b461857f60ab199a5cd..4d8a8a1ab53e00b38208bacd8ef28a703ee55b96 100644 (file)
@@ -216,9 +216,11 @@ void go_threading(void)
        CtdlShutdownServiceHooks();             /* close all listener sockets to prevent new connections */
        PerformSessionHooks(EVT_SHUTDOWN);      /* run any registered shutdown hooks */
 
-       int countdown = 10;
+       int countdown = 30;
        while ( (num_workers > 0) && (countdown-- > 0)) {
-               syslog(LOG_DEBUG, "Waiting for %d worker threads to exit", num_workers);
+               syslog(LOG_DEBUG, "Waiting %d seconds for %d worker threads to exit",
+                       countdown, num_workers
+               );
                sleep(1);
        }
 }