diff options
author | Guido van Rossum <guido@python.org> | 1998-10-07 16:39:47 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1998-10-07 16:39:47 (GMT) |
commit | 9e46e562640cdf5c2e69cd39ef4f30254c107e87 (patch) | |
tree | 3f79db7db1986e0e4801f5b18932e090ee2d8d26 /Python/thread_pthread.h | |
parent | c501583dfa6dc5e50cf1d36f0770acb87908b109 (diff) | |
download | cpython-9e46e562640cdf5c2e69cd39ef4f30254c107e87.zip cpython-9e46e562640cdf5c2e69cd39ef4f30254c107e87.tar.gz cpython-9e46e562640cdf5c2e69cd39ef4f30254c107e87.tar.bz2 |
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.
Diffstat (limited to 'Python/thread_pthread.h')
-rw-r--r-- | Python/thread_pthread.h | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h index 24f8f4e..71ae66d 100644 --- a/Python/thread_pthread.h +++ b/Python/thread_pthread.h @@ -32,6 +32,7 @@ PERFORMANCE OF THIS SOFTWARE. /* Posix threads interface */ #include <stdlib.h> +#include <string.h> #include <pthread.h> @@ -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; |