]> granicus.if.org Git - python/commitdiff
BSDI specific patches, inspired by Nigel Head and otto@mail.olympus.net.
authorGuido van Rossum <guido@python.org>
Wed, 7 Oct 1998 16:39:47 +0000 (16:39 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 7 Oct 1998 16:39:47 +0000 (16:39 +0000)
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

index 24f8f4e368b391daca993f1b4c239a6fc59e400e..71ae66d6c8f97cdc8ab9a25ce20fac0943932bd4 100644 (file)
@@ -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;