Previously the number of total threads and the number of unused threads was wrong if at one point the creation of a thread failed. Fix this by decrementing both counters that were previously optimistically incremented. Adjust the comment accordingly.
* libports/manage-multithread.c (ports_manage_port_operations_multithread): Fix the thread counts in case the thread creation fails. --- libports/manage-multithread.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libports/manage-multithread.c b/libports/manage-multithread.c index 4003cfb..c73305d 100644 --- a/libports/manage-multithread.c +++ b/libports/manage-multithread.c @@ -140,9 +140,13 @@ ports_manage_port_operations_multithread (struct port_bucket *bucket, pthread_detach (pthread_id); else { - /* XXX The number of threads should be adjusted but the code - and design of the Hurd servers just don't handle thread - creation failure. */ + pthread_spin_lock (&lock); + totalthreads--; + nreqthreads--; + pthread_spin_unlock (&lock); + /* There is not much we can do at this point. The code + and design of the Hurd servers just don't handle + thread creation failure. */ errno = err; perror ("pthread_create"); } -- 1.7.10.4