X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2Fthreads%2Fthreads.xs;h=59e3597aadba329939d9a6b195d9518458b39467;hb=65575be5af9681bf691b8b72b0e5b7f432a867bf;hp=271aa4ab5a1f12564d55faea30126b7bf160f58a;hpb=c133c03fba8fc439e535e387ad9f4605abbe0e8c;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/threads/threads.xs b/ext/threads/threads.xs index 271aa4a..59e3597 100755 --- a/ext/threads/threads.xs +++ b/ext/threads/threads.xs @@ -280,7 +280,7 @@ Perl_ithread_run(void * arg) { } PUTBACK; if (SvTRUE(ERRSV)) { - Perl_warn(aTHX_ "Died:%" SVf,ERRSV); + Perl_warn(aTHX_ "thread failed to start: %" SVf, ERRSV); } FREETMPS; LEAVE; @@ -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 @@ -601,7 +602,12 @@ PPCODE: } void -ithread_yield(ithread *thread) +yield(...) +CODE: +{ + YIELD; +} + void ithread_detach(ithread *thread)