From 9e46e562640cdf5c2e69cd39ef4f30254c107e87 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 7 Oct 1998 16:39:47 +0000 Subject: [PATCH] BSDI specific patches, inspired by Nigel Head and otto@mail.olympus.net. Also (non-BSDI specific): - Change the CHECK_STATUS() macro so it tests for nonzero error codes instead of negative error codes only (this was needed for BSDI, but appears to be correct according to the PTHREADS spec). - use memset() to zero out the allocated lock structure. Again, this was needed for BSDI, but can't hurt elsewhere either. --- Python/thread_pthread.h | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h index 24f8f4e368..71ae66d6c8 100644 --- a/Python/thread_pthread.h +++ b/Python/thread_pthread.h @@ -32,6 +32,7 @@ PERFORMANCE OF THIS SOFTWARE. /* Posix threads interface */ #include +#include #include @@ -113,11 +114,28 @@ typedef struct { pthread_mutex_t mut; } pthread_lock; -#define CHECK_STATUS(name) if (status < 0) { perror(name); error=1; } +#define CHECK_STATUS(name) if (status != 0) { perror(name); error = 1; } /* * Initialization. */ + +#ifdef _HAVE_BSDI +static void _noop() +{ +} + +static void _init_thread _P0() +{ + /* DO AN INIT BY STARTING THE THREAD */ + static int dummy = 0; + pthread_t thread1; + pthread_create(&thread1, NULL, (void *) _noop, &dummy); + pthread_join(thread1, NULL); +} + +#else /* !_HAVE_BSDI */ + static void _init_thread _P0() { #if defined(_AIX) && defined(__GNUC__) @@ -125,6 +143,8 @@ static void _init_thread _P0() #endif } +#endif /* !_HAVE_BSDI */ + /* * Thread support. */ @@ -234,6 +254,7 @@ type_lock allocate_lock _P0() init_thread(); lock = (pthread_lock *) malloc(sizeof(pthread_lock)); + memset((void *)lock, '\0', sizeof(pthread_lock)); if (lock) { lock->locked = 0; -- 2.40.0