]> code.citadel.org Git - citadel.git/blobdiff - webcit/context_loop.c
Fixed a race condition which made the thread pool size unnecessarily large.
[citadel.git] / webcit / context_loop.c
index 8559f09b02006b489f794ebe567d569a9124d1cb..266b2f4c7d4a4ffb328bc1dc390236493bec0245 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * $Id$
- *
  * This is the other half of the webserver.  It handles the task of hooking
  * up HTTP requests with the sessions they belong to, using HTTP cookies to
  * keep track of things.  If the HTTP request doesn't belong to any currently
@@ -116,7 +114,7 @@ void check_thread_pool_size(void)
        if (time_to_die) return;                /* don't expand the thread pool during shutdown */
 
        begin_critical_section(S_SPAWNER);      /* only one of these should run at a time */
-       while (
+       if (
                (num_threads_executing >= num_threads_existing)
                && (num_threads_existing < MAX_WORKER_THREADS)
        ) {
@@ -308,6 +306,7 @@ int ReadHttpSubject(ParsedHttpHdrs *Hdr, StrBuf *Line, StrBuf *Buf)
        }
 
        StrBufAppendBuf(Hdr->this_page, Hdr->HR.ReqLine, 0);
+
        /* chop Filename / query arguments */
        Args = strchr(ChrPtr(Hdr->HR.ReqLine), '?');
        if (Args == NULL) /* whe're not that picky about params... TODO: this will spoil '&' in filenames.*/
@@ -672,16 +671,20 @@ void Header_HandleUserAgent(StrBuf *Line, ParsedHttpHdrs *hdr)
 
 void Header_HandleHost(StrBuf *Line, ParsedHttpHdrs *hdr)
 {
-       if ((follow_xff) && (hdr->HR.http_host != NULL))
-               return;
-       else
-               hdr->HR.http_host = Line;
+       if (site_prefix == NULL) {
+               site_prefix = NewStrBuf();
+               StrBufAppendPrintf(site_prefix, "%s://", (is_https ? "https" : "http") );
+               StrBufAppendBuf(site_prefix, Line, 0);
+       }
 }
 
 void Header_HandleXFFHost(StrBuf *Line, ParsedHttpHdrs *hdr)
 {
-       if (follow_xff)
-               hdr->HR.http_host = Line;
+       if ( (follow_xff) && (site_prefix == NULL)) {
+               site_prefix = NewStrBuf();
+               StrBufAppendPrintf(site_prefix, "http://");     /* this is naive; do something about it */
+               StrBufAppendBuf(site_prefix, Line, 0);
+       }
 }