Re: [PATCH] Re: Not OK: perl 5.00553 on OPENSTEP-Mach 4_1
[p5sagit/p5-mst-13.2.git] / perl.h
diff --git a/perl.h b/perl.h
index 04647a3..825f304 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -1371,6 +1371,10 @@ typedef I32 (*filter_t) _((int, SV *, int));
 #        include "os2thread.h"
 #      else
 #        ifdef I_MACH_CTHREADS
+#          include <mach/cthreads.h>
+#          ifdef NeXT
+#            define MUTEX_INIT_CALLS_MALLOC
+#          endif
 typedef cthread_t      perl_os_thread;
 typedef mutex_t                perl_mutex;
 typedef condition_t    perl_cond;
@@ -1815,8 +1819,22 @@ typedef Sighandler_t Sigsave_t;
 #endif
 
 #ifdef MYMALLOC
-#  define MALLOC_INIT MUTEX_INIT(&PL_malloc_mutex)
-#  define MALLOC_TERM MUTEX_DESTROY(&PL_malloc_mutex)
+#  ifdef MUTEX_INIT_CALLS_MALLOC
+#    define MALLOC_INIT                                        \
+       STMT_START {                                    \
+               PL_malloc_mutex = NULL;                 \
+               MUTEX_INIT(&PL_malloc_mutex);           \
+       } STMT_END
+#    define MALLOC_TERM                                        \
+       STMT_START {                                    \
+               perl_mutex tmp = PL_malloc_mutex;       \
+               PL_malloc_mutex = NULL;                 \
+               MUTEX_DESTROY(&tmp);                    \
+       } STMT_END
+#  else
+#    define MALLOC_INIT MUTEX_INIT(&PL_malloc_mutex)
+#    define MALLOC_TERM MUTEX_DESTROY(&PL_malloc_mutex)
+#  endif
 #else
 #  define MALLOC_INIT
 #  define MALLOC_TERM