Fix for bug [ID 20020602.007].
Artur Bergman [Sat, 8 Jun 2002 10:06:05 +0000 (10:06 +0000)]
Don't decrement the active flag until AFTER we have run perl_destruct

p4raw-id: //depot/perl@17080

ext/threads/threads.xs

index cbe4e04..e1f6c9a 100755 (executable)
@@ -288,10 +288,6 @@ Perl_ithread_run(void * arg) {
        }
 
        PerlIO_flush((PerlIO*)NULL);
-       MUTEX_LOCK(&create_destruct_mutex);
-       active_threads--;
-       assert( active_threads >= 0 );
-       MUTEX_UNLOCK(&create_destruct_mutex);
        MUTEX_LOCK(&thread->mutex);
        thread->state |= PERL_ITHR_FINISHED;
 
@@ -301,6 +297,11 @@ Perl_ithread_run(void * arg) {
        } else {
                MUTEX_UNLOCK(&thread->mutex);
        }
+       MUTEX_LOCK(&create_destruct_mutex);
+       active_threads--;
+       assert( active_threads >= 0 );
+       MUTEX_UNLOCK(&create_destruct_mutex);
+
 #ifdef WIN32
        return (DWORD)0;
 #else