diff options
Diffstat (limited to 'src/thread.c')
-rw-r--r-- | src/thread.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/thread.c b/src/thread.c index 4afd0af..5b64caa 100644 --- a/src/thread.c +++ b/src/thread.c @@ -1,4 +1,4 @@ -/* $Id: thread.c,v 1.20 2002-01-08 02:02:25 rjkaes Exp $ +/* $Id: thread.c,v 1.21 2002-01-25 00:01:45 rjkaes Exp $ * * Handles the creation/destruction of the various threads required for * processing incoming connections. @@ -144,6 +144,14 @@ thread_main(void *arg) * Make sure no error occurred... */ if (connfd < 0) { + /* + * Accept could return an "error" if it was + * interrupted by a signal (like when the program + * should be killed. :) + */ + if (config.quit) + break; + log_message(LOG_ERR, "Accept returned an error (%s) ... retrying.", strerror(errno)); continue; } @@ -288,6 +296,20 @@ thread_main_loop(void) SERVER_UNLOCK(); } +/* + * Go through all the non-empty threads and cancel them. + */ +void +thread_kill_threads(void) +{ + int i; + + for (i = 0; i < thread_config.maxclients; i++) { + if (thread_ptr[i].status != T_EMPTY) + pthread_cancel(thread_ptr[i].tid); + } +} + int thread_listening_sock(uint16_t port) { |