You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@perl.apache.org by "Philippe M. Chiasson" <go...@ectoplasm.org> on 2005/01/15 23:48:13 UTC

Re: svn commit: r125036 - /perl/modperl/trunk/Changes /perl/modperl/trunk/src/modules/perl/mod_perl.c /perl/modperl/trunk/src/modules/perl/modperl_perl_includes.h

stas@apache.org wrote:

>Author: stas
>Date: Wed Jan 12 20:33:03 2005
>New Revision: 125036
>
>URL: http://svn.apache.org/viewcvs?view=rev&rev=125036
>Log:
>add a perl bug workaround: with USE_ITHREADS perl leaks pthread_key_t
>on every reload of libperl.{a,so} (it's allocated on the very first
>perl_alloc() and never freed). This becomes a problem on apache
>restart: if the OS limit is 1024, 1024 restarts later things will
>start crashing
>  
>
Causes segfaults on startup on Darwin (OS X) :

#0  0x02432910 in S_mess_alloc (my_perl=0x0) at util.c:818
#1  0x02432db4 in Perl_vmess (my_perl=0x0, pat=0x252fc5c "panic: 
pthread_setspecific", args=0xbffff364) at u
til.c:946
#2  0x02434260 in Perl_vcroak (my_perl=0x0, pat=0x252fc5c "panic: 
pthread_setspecific", args=0xbffff364) at
util.c:1146
#3  0x02434bd4 in Perl_croak_nocontext (pat=0x252fc5c "panic: 
pthread_setspecific") at util.c:1216
#4  0x023b5a4c in perl_alloc () at perl.c:144
#5  0x02206420 in modperl_startup (s=0x1807fb8, p=0x1806218) at 
mod_perl.c:237
#6  0x02206350 in modperl_startup (s=0x1807fb8, p=0x1806218) at 
mod_perl.c:207
#7  0x02207d84 in modperl_init (base_server=0x1807fb8, p=0x1806218) at 
mod_perl.c:453
#8  0x022083e0 in modperl_hook_init (pconf=0x1806218, plog=0x0, 
ptemp=0x0, s=0x1807fb8) at mod_perl.c:613
#9  0x02208438 in modperl_run () at mod_perl.c:624
#10 0x0221066c in modperl_cmd_load_module (parms=0xbffff910, 
mconfig=0x1843ff8, arg=0x1971b78 "TestCompat::a
pache_module") at modperl_cmd.c:658
#11 0x00020498 in invoke_cmd (cmd=0x2240be0, parms=0xbffff910, 
mconfig=0x1843ff8, args=0x1971b78 "TestCompat
::apache_module") at config.c:796
#12 0x00020bc4 in ap_walk_config_sub (current=0x1971b58, 
parms=0xbffff910, section_vector=0x183de50) at conf
ig.c:1059
#13 0x00020c64 in ap_walk_config (current=0x2240be0, parms=0xbffff910, 
section_vector=0x1971b58) at config.c
:1098
#14 0x00021a08 in ap_process_config_tree (s=0x1807fb8, 
conftree=0x183de50, p=0x2240be0, ptemp=0xbffff910) at
 config.c:1641
#15 0x0000ae18 in main (argc=11, argv=0xbffffab0) at main.c:595

Without this patch, Darwin works fine, so maybe consider this patch ?

Index: src/modules/perl/modperl_perl_includes.h
===================================================================
--- src/modules/perl/modperl_perl_includes.h	(revision 125297)
+++ src/modules/perl/modperl_perl_includes.h	(working copy)
@@ -142,7 +142,7 @@
 /* XXX: once and if it's fixed in perl, we need to disable it for the
  * versions that have it fixed, otherwise it'll crash because it'll be
  * freed twice */
-#ifdef USE_ITHREADS
+#if defined(USE_ITHREADS) && !defined(PERL_DARWIN)
 #define MP_PERL_FREE_THREAD_KEY_WORKAROUND      \
     if (PL_curinterp) {                         \
         FREE_THREAD_KEY;                        \

--------------------------------------------------------------------------------
Philippe M. Chiasson m/gozer\@(apache|cpan|ectoplasm)\.org/ GPG KeyID : 88C3A5A5 
http://gozer.ectoplasm.org/     F9BF E0C2 480E 7680 1AE5 3631 CB32 A107 88C3A5A5