develooper Front page | perl.perl5.porters | Postings from July 2001

[patch] pthread_atfork bandaid

Thread Next
From:
Doug MacEachern
Date:
July 11, 2001 08:58
Subject:
[patch] pthread_atfork bandaid
Message ID:
Pine.LNX.4.21.0107110855070.11688-100000@mako.covalent.net
current bleedperl is totally unusable with modperl-2.0 since
PTHREAD_ATFORK causes the server to deadlock.  until the right solution is
determined, this patch will cure the problem for modperl by moving the
PTHREAD_ATFORK call to perlmain.c

Index: perl.c
===================================================================
RCS file: /usr/local/cvs_repository/perl-current-mirror/perl.c,v
retrieving revision 1.1.1.37
diff -u -r1.1.1.37 perl.c
--- perl.c	2001/07/11 15:26:26	1.1.1.37
+++ perl.c	2001/07/11 15:47:31
@@ -59,12 +59,9 @@
 #else
 #  if defined(USE_ITHREADS)
 
-static void S_atfork_lock(void);
-static void S_atfork_unlock(void);
-
 /* this is called in parent before the fork() */
-static void
-S_atfork_lock(void)
+void
+Perl_atfork_lock(void)
 {
     /* locks must be held in locking order (if any) */
 #ifdef MYMALLOC
@@ -74,8 +71,8 @@
 }
 
 /* this is called in both parent and child after the fork() */
-static void
-S_atfork_unlock(void)
+void
+Perl_atfork_unlock(void)
 {
     /* locks must be released in same order as in S_atfork_lock() */
 #ifdef MYMALLOC
@@ -92,9 +89,6 @@
 	    ALLOC_THREAD_KEY;			\
 	    PERL_SET_THX(my_perl);		\
 	    OP_REFCNT_INIT;			\
-	    PTHREAD_ATFORK(S_atfork_lock,	\
-			   S_atfork_unlock,	\
-			   S_atfork_unlock);	\
 	}					\
 	else {					\
 	    PERL_SET_THX(my_perl);		\
Index: miniperlmain.c
===================================================================
RCS file: /usr/local/cvs_repository/perl-current-mirror/miniperlmain.c,v
retrieving revision 1.1.1.3
diff -u -r1.1.1.3 miniperlmain.c
--- miniperlmain.c	2001/06/13 15:17:01	1.1.1.3
+++ miniperlmain.c	2001/07/11 15:48:05
@@ -48,6 +48,12 @@
 
     PERL_SYS_INIT3(&argc,&argv,&env);
 
+#ifdef USE_ITHREADS
+    PTHREAD_ATFORK(Perl_atfork_lock,
+                   Perl_atfork_unlock,
+                   Perl_atfork_unlock);
+#endif
+
     if (!PL_do_undump) {
 	my_perl = perl_alloc();
 	if (!my_perl)


Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About