# 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;
#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