summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert James Kaes <rjkaes@users.sourceforge.net>2001-09-06 21:16:35 +0000
committerRobert James Kaes <rjkaes@users.sourceforge.net>2001-09-06 21:16:35 +0000
commitf2312262c77f4c2a5e35b984a9a012e8332690d4 (patch)
treea369d0d2c8cc8314c18e926c1f49049f3bedd0c8
parent445aaca53e0964f3243e4641b556c79493d8bb14 (diff)
downloadtinyproxy-f2312262c77f4c2a5e35b984a9a012e8332690d4.tar.gz
tinyproxy-f2312262c77f4c2a5e35b984a9a012e8332690d4.zip
Try moving the kill thread code into the thread_main() function so it can
check if there are too many thread after it's finished with it's request. Needs to be cleaned up further (if this is the right idea) because of the locking around the servers_waiting variable.
-rw-r--r--src/thread.c32
1 files changed, 13 insertions, 19 deletions
diff --git a/src/thread.c b/src/thread.c
index 8245928..b5dd39d 100644
--- a/src/thread.c
+++ b/src/thread.c
@@ -1,4 +1,4 @@
-/* $Id: thread.c,v 1.9 2001-09-06 19:00:47 rjkaes Exp $
+/* $Id: thread.c,v 1.10 2001-09-06 21:16:35 rjkaes Exp $
*
* Handles the creation/destruction of the various threads required for
* processing incoming connections.
@@ -140,6 +140,16 @@ static void *thread_main(void *arg)
}
}
+ if (servers_waiting > thread_config.maxspareservers) {
+ /*
+ * There are too many spare threads, kill ourselves
+ * off.
+ */
+ log_message(LOG_NOTICE, "Too many spare threads, killing ourself.");
+ ptr->status = T_EMPTY;
+ return NULL;
+ }
+
ptr->status = T_WAITING;
SERVER_INC();
@@ -195,8 +205,8 @@ int thread_pool_create(void)
}
/*
- * Keep the proper number of servers running. This is the birth and death
- * of the servers. It monitors this at least once a second.
+ * Keep the proper number of servers running. This is the birth of the
+ * servers. It monitors this at least once a second.
*/
int thread_main_loop(void)
{
@@ -216,22 +226,6 @@ int thread_main_loop(void)
break;
}
}
- } else if (servers_waiting > thread_config.maxspareservers) {
- DEBUG2("servers_waiting: %d MaxSpareServers: %d", servers_waiting, thread_config.maxspareservers);
- for (i = 0; i < thread_config.maxclients; i++) {
- if (thread_ptr[i].status == T_WAITING) {
- pthread_join(thread_ptr[i].tid, NULL);
-
- SERVER_DEC();
-
- thread_ptr[i].status = T_EMPTY;
- thread_ptr[i].connects = 0;
-
- log_message(LOG_NOTICE, "Killed off a thread.");
- break;
- }
- }
- DEBUG1("finished killing threads");
}
return 0;