Decrement num_workers when exiting worker_thread() under _any_ circumstances.
[citadel.git] / citadel / sysdep.c
index ea89f5ac5e9e3865be37c6c8111f6a0d1a61030d..9f1425bb2ac55b4011ebfb85955c2b2e70da09b4 100644 (file)
@@ -1200,6 +1200,7 @@ do_select:        force_purge = 0;
                        retval = select(highest + 1, &readfds, NULL, NULL, &tv);
                }
                else {
+                       --num_workers;
                        return NULL;
                }
 
@@ -1219,12 +1220,18 @@ do_select:      force_purge = 0;
 #if 0
                                syslog(LOG_DEBUG, "Interrupted select()\n");
 #endif
-                               if (server_shutting_down) return(NULL);
+                               if (server_shutting_down) {
+                                       --num_workers;
+                                       return(NULL);
+                               }
                                goto do_select;
                        }
                }
                else if (retval == 0) {
-                       if (server_shutting_down) return(NULL);
+                       if (server_shutting_down) {
+                               --num_workers;
+                               return(NULL);
+                       }
                }
 
                /* It must be a client socket.  Find a context that has data