summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1998-10-07 16:39:47 (GMT)
committerGuido van Rossum <guido@python.org>1998-10-07 16:39:47 (GMT)
commit9e46e562640cdf5c2e69cd39ef4f30254c107e87 (patch)
tree3f79db7db1986e0e4801f5b18932e090ee2d8d26 /Python
parentc501583dfa6dc5e50cf1d36f0770acb87908b109 (diff)
downloadcpython-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')
-rw-r--r--Python/thread_pthread.h23
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;