summaryrefslogtreecommitdiff
path: root/thread.h
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>2001-07-05 00:42:49 +0000
committerGurusamy Sarathy <gsar@cpan.org>2001-07-05 00:42:49 +0000
commit50dd6e574ff39b609595ddb16b2fe9f625a26f8c (patch)
tree75623d7252059f79bb9271a8ea59619aaee0be4f /thread.h
parentd3a7fa0a676f35fac595b7197c9c94e498857827 (diff)
downloadperl-50dd6e574ff39b609595ddb16b2fe9f625a26f8c.tar.gz
perl built with USE_ITHREADS can deadlock during fork() or backticks
since it doesn't ensure threads other than the one calling fork() aren't holding any locks; the fix is to use pthread_atfork() to hold global locks building perl with -Dusemymalloc exacerbates the problem since Perl_malloc() holds a mutex, and perl's exec() calls New() XXX the code in win32thread.h may be needed on platforms that have no pthread_atfork() p4raw-id: //depot/perl@11151
Diffstat (limited to 'thread.h')
-rw-r--r--thread.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/thread.h b/thread.h
index 87fcdbe185..a1e8fdc65b 100644
--- a/thread.h
+++ b/thread.h
@@ -302,6 +302,11 @@
} STMT_END
#endif
+#ifndef PTHREAD_ATFORK
+# define PTHREAD_ATFORK(prepare,parent,child) \
+ pthread_atfork(prepare,parent,child)
+#endif
+
#ifndef THREAD_RET_TYPE
# define THREAD_RET_TYPE void *
# define THREAD_RET_CAST(p) ((void *)(p))
@@ -456,3 +461,7 @@ typedef struct condpair {
#ifndef INIT_THREADS
# define INIT_THREADS NOOP
#endif
+
+#ifndef PTHREAD_ATFORK
+# define PTHREAD_ATFORK(prepare,parent,child) NOOP
+#endif