This allows system shutdown to proceed normally.
retval = select(highest + 1, &readfds, NULL, NULL, &tv);
}
else {
+ --num_workers;
return NULL;
}
#if 0
syslog(LOG_DEBUG, "Interrupted select()\n");
#endif
- 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
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);
}
}