]> code.citadel.org Git - citadel.git/blobdiff - webcit/context_loop.c
Clear selected_language when marking a guest session as inuse=0.
[citadel.git] / webcit / context_loop.c
index f9238ab6aee14d3e97669d76932371eacdc9bc42..3122ce49448fbf43e2563ec0f79d29a1b32633b0 100644 (file)
@@ -39,6 +39,10 @@ extern HashList *HandlerHash;
 int num_threads_existing = 1;          /* Number of worker threads which exist. */
 int num_threads_executing = 1;         /* Number of worker threads currently executing. */
 
+extern void session_loop(void);
+void spawn_another_worker_thread(void);
+
+
 void DestroyHttpHeaderHandler(void *V)
 {
        OneHttpHeader *pHdr;
@@ -189,11 +193,7 @@ wcsession *FindSession(wcsession **wclist, ParsedHttpHdrs *Hdr, pthread_mutex_t
                        break;                       
                case NO_AUTH:
                        /* Any unbound session is a candidate */
-                       if (sptr->wc_session == 0) {
-                               /* FIXME -- look for a session that is not only a candidate, but is
-                                * also NOT CURRENTLY LOCKED.  This will cause the proper size pool
-                                * to be created.
-                                */
+                       if ( (sptr->wc_session == 0) && (sptr->inuse == 0) ) {
                                TheSession = sptr;
                        }
                        break;
@@ -586,16 +586,15 @@ void context_loop(ParsedHttpHdrs *Hdr)
        CtdlLogResult(pthread_mutex_lock(&TheSession->SessionMutex));
        pthread_setspecific(MyConKey, (void *)TheSession);
        
+       TheSession->inuse = 1;                                  /* mark the session as bound */
        TheSession->lastreq = time(NULL);                       /* log */
        TheSession->Hdr = Hdr;
 
        session_attach_modules(TheSession);
        session_loop();                         /* do transaction */
 
-
        /* How long did this transaction take? */
        gettimeofday(&tx_finish, NULL);
-       
 
        syslog(9, "HTTP: 200 [%ld.%06ld] %s %s \n",
                ((tx_finish.tv_sec*1000000 + tx_finish.tv_usec) - (tx_start.tv_sec*1000000 + tx_start.tv_usec)) / 1000000,
@@ -617,6 +616,8 @@ void context_loop(ParsedHttpHdrs *Hdr)
        }
 
        TheSession->Hdr = NULL;
+       TheSession->inuse = 0;                                  /* mark the session as unbound */
+       TheSession->selected_language = 0;                      /* clear any non-default language setting */
        CtdlLogResult(pthread_mutex_unlock(&TheSession->SessionMutex));
 }