diff options
-rw-r--r-- | libports/manage-multithread.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/libports/manage-multithread.c b/libports/manage-multithread.c index 6ec1e49f..82fa2ac6 100644 --- a/libports/manage-multithread.c +++ b/libports/manage-multithread.c @@ -60,6 +60,7 @@ ports_manage_port_operations_multithread (struct port_bucket *bucket, assert (nreqthreads); nreqthreads--; if (nreqthreads == 0) + /* No thread would be listening for requests, spawn one. */ spawn = 1; spin_unlock (&lock); @@ -150,6 +151,12 @@ ports_manage_port_operations_multithread (struct port_bucket *bucket, else { spin_lock (&lock); + if (nreqthreads == 1) + { + /* No other thread is listening for requests, continue. */ + spin_unlock (&lock); + goto startover; + } nreqthreads--; totalthreads--; spin_unlock (&lock); |