ctdl_thread_internal_gc() now follows rule for critical_section
authorDave West <davew@uncensored.citadel.org>
Fri, 30 Nov 2007 19:12:30 +0000 (19:12 +0000)
committerDave West <davew@uncensored.citadel.org>
Fri, 30 Nov 2007 19:12:30 +0000 (19:12 +0000)
citadel/server_main.c
citadel/sysdep.c

index a18c50266547bde8af55e318bdaf3aee954dde9f..67102a2061e338458fd318b6fa05d7406c00f784 100644 (file)
@@ -354,9 +354,15 @@ int main(int argc, char **argv)
                ctdl_thread_internal_calc_loadavg();
                end_critical_section(S_THREAD_LIST);
                CtdlThreadSleep(1);
+               begin_critical_section(S_THREAD_LIST);
                ctdl_internal_thread_gc();
+               end_critical_section(S_THREAD_LIST);
                if (CtdlThreadGetCount() <= 1) // Shutting down clean up the garbage collector
+               {
+                       begin_critical_section(S_THREAD_LIST);
                        ctdl_internal_thread_gc();
+                       end_critical_section(S_THREAD_LIST);
+               }
        }
        /*
         * If the above loop exits we must be shutting down since we obviously have no threads
index dafe4536c716cc9bfcd64de318be1e8c6dfc30ca..5f27ad681e353648ac1186acdec22dae9c0854e9 100644 (file)
@@ -1517,7 +1517,6 @@ void ctdl_internal_thread_gc (void)
        /*
         * Woke up to do garbage collection
         */
-       begin_critical_section(S_THREAD_LIST);
        this_thread = CtdlThreadList;
        while(this_thread)
        {
@@ -1534,7 +1533,6 @@ void ctdl_internal_thread_gc (void)
                
                if (pthread_equal(that_thread->tid, pthread_self()) && that_thread->thread_func)
                {       /* Sanity check */
-                       end_critical_section(S_THREAD_LIST);
                        CtdlLogPrintf(CTDL_EMERG, "Thread system PANIC, a thread is trying to clean up after itself.\n");
                        CtdlThreadStopAll();
                        return;
@@ -1542,7 +1540,6 @@ void ctdl_internal_thread_gc (void)
                
                if (num_threads <= 0)
                {       /* Sanity check */
-                       end_critical_section (S_THREAD_LIST);
                        CtdlLogPrintf(CTDL_EMERG, "Thread system PANIC, num_threads <= 0 and trying to do Garbage Collection.\n");
                        CtdlThreadStopAll();
                        return;
@@ -1582,14 +1579,12 @@ void ctdl_internal_thread_gc (void)
        /* Sanity check number of worker threads */
        if (workers != num_workers)
        {
-               end_critical_section(S_THREAD_LIST);
                CtdlLogPrintf(CTDL_WARNING,
                        "Thread system WARNING, discrepancy in number of worker threads. Counted %d, should be %d.\n",
                        workers, num_workers
                        );
                return;
        }
-       end_critical_section(S_THREAD_LIST);
 }