diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 1998-02-03 03:45:09 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 1998-02-03 03:45:09 +0000 |
commit | 43a861f1c4418d63c6d99fbecb816d11ccf25793 (patch) | |
tree | 5e372c082dfbfb4e786c379f5a2897f797cd270f /ext | |
parent | 423d68ab98265bbd73b2ade2438378d2784c6e8c (diff) | |
parent | e7f07268aa53c62dd99727c5a996618d28697a90 (diff) | |
download | perl-43a861f1c4418d63c6d99fbecb816d11ccf25793.tar.gz |
[win32] integrate mainline
p4raw-id: //depot/win32/perl@455
Diffstat (limited to 'ext')
-rw-r--r-- | ext/Thread/Thread.xs | 32 |
1 files changed, 11 insertions, 21 deletions
diff --git a/ext/Thread/Thread.xs b/ext/Thread/Thread.xs index c5adcb3eb7..3b49dbecb2 100644 --- a/ext/Thread/Thread.xs +++ b/ext/Thread/Thread.xs @@ -12,7 +12,6 @@ #endif #include <fcntl.h> -static U32 threadnum = 0; static int sig_pipe[2]; #ifndef THREAD_RET_TYPE @@ -208,6 +207,8 @@ newthread (SV *startsv, AV *initargs, char *classname) SV *sv; int err; #ifndef THREAD_CREATE + static pthread_attr_t attr; + static int attr_inited = 0; sigset_t fullmask, oldmask; #endif @@ -233,33 +234,22 @@ newthread (SV *startsv, AV *initargs, char *classname) sigfillset(&fullmask); if (sigprocmask(SIG_SETMASK, &fullmask, &oldmask) == -1) croak("panic: sigprocmask"); -#ifdef PTHREADS_CREATED_JOINABLE - err = pthread_create(&thr->self, pthread_attr_default, - threadstart, (void*) thr); -#else - { - pthread_attr_t attr; - + err = 0; + if (!attr_inited) { + attr_inited = 1; err = pthread_attr_init(&attr); - if (err == 0) { -#ifdef PTHREAD_CREATE_UNDETACHED - err = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_UNDETACHED); -#else - croak("panic: pthread_attr_setdetachstate"); -#endif - if (err == 0) - err = pthread_create(&thr->self, &attr, - threadstart, (void*) thr); - } - pthread_attr_destroy(&attr); + if (err == 0) + err = pthread_attr_setdetachstate(&attr, ATTR_JOINABLE); } -#endif + if (err == 0) + err = pthread_create(&thr->self, &attr, threadstart, (void*) thr); /* Go */ MUTEX_UNLOCK(&thr->mutex); #endif if (err) { DEBUG_L(PerlIO_printf(PerlIO_stderr(), - "%p: create of %p failed %d\n", savethread, thr, err)); + "%p: create of %p failed %d\n", + savethread, thr, err)); /* Thread creation failed--clean up */ SvREFCNT_dec(thr->cvcache); remove_thread(thr); |