Surely the old code is saying that refcount != 0 means the interpreter is still 
in use?:

-    if (interp->refcnt != 0) {
+    if (interp->refcnt > 1) {
         --interp->refcnt;
         MP_TRACE_i(MP_FUNC, "interp=0x%lx, refcnt=%d -- interp still in use",
                    (unsigned long)interp, interp->refcnt);

In both versions, refcount == 0 means the interpreter is not used any more.
What you've changed is the refcount == 1 case: the old code would say an 
interpreter is still in use; the new code says not.

That doesn't sound right. It makes no difference to the tests on Windows, 
though.


> -----Original Message-----
> From: Jan Kaluža [mailto:jkal...@redhat.com]
> Sent: 30 January 2014 09:04
> To: dev@perl.apache.org
> Subject: Re: mod_perl head build with httpd 2.4.6 on Linux results
> 
> Hi again,
> 
> I've been able to fix the problem with freezing tests with event MPM
> using attached patch. The problem is that currently I'm somehow
> confused by the patched code.
> 
> Does somebody have an idea why the previous code thought that refcount
> == 0 means that perl interpreter is still in use? I would say that
> refcount == 0 would mean that perl interpreter is *not* used anymore.
> 
> The attached patch changes exactly this mentioned refcount behaviour
> and the tests are passing with all three MPMs in Linux.
> 
> Can you please verify the fix?
> 
> Regards,
> Jan Kaluza
> 
> On 01/23/2014 01:18 PM, Jan Kaluža wrote:
> > On 11/15/2013 04:01 PM, Jeff Trawick wrote:
> >> Is it fair to say that mod_perl shouldn't be used with the event
> MPM?
> >>
> >> With the httpd24threading branch on Linux (older, RHEL 5-ish stuff)
> >> and httpd 2.4.6 with event MPM, I'm getting hangs in some testcases
> >> (e.g., echo_bbs2, echo_nonblock, in_str_sandwich, etc., but not
> >> consistent) and even a crash:
> >
> > I'm able to reproduce handing echo_nonblock with event mpm even with
> > my
> > httpd24 branch (so without threading fixes). I will try to fix this
> > one or at least debug it more.
> >
> >> #2  <signal handler called>
> >> #3  0x00002aaaaad0c2a3 in ?? () from
> >> /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-
> multi/auto/DBI
> >> /DBI.so
> >>
> >> #4  0x00002aaaaad0ee8e in XS_DBI_dispatch () from
> >> /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-
> multi/auto/DBI
> >> /DBI.so
> >>
> >> #5  0x0000003060290a96 in Perl_pp_entersub () from
> >> /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
> >> #6  0x00000030602338a7 in ?? () from
> >> /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
> >> #7  0x00000030602376f0 in Perl_call_sv () from
> >> /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
> >> #8  0x0000003060295416 in Perl_sv_clear () from
> >> /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
> >> #9  0x0000003060295bc0 in Perl_sv_free () from
> >> /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
> >> #10 0x0000003060295727 in Perl_sv_clear () from
> >> /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
> >> #11 0x0000003060295bc0 in Perl_sv_free () from
> >> /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
> >> #12 0x0000003060284cbc in Perl_hv_free_ent () from
> >> /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
> >> #13 0x0000003060284e26 in ?? () from
> >> /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
> >> #14 0x0000003060286750 in Perl_hv_undef () from
> >> /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
> >> #15 0x000000306029581a in Perl_sv_clear () from
> >> /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
> >> #16 0x0000003060295bc0 in Perl_sv_free () from
> >> /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE/libperl.so
> >> #17 0x00002ae2c8fd6914 in modperl_cleanup_pnotes (data=0x1568c788)
> at
> >> modperl_util.c:839
> >> #18 0x00002ae2bd992919 in run_cleanups (cref=0x1568bda8) at
> >> memory/unix/apr_pools.c:2352
> >> #19 0x00002ae2bd991732 in apr_pool_clear (pool=0x1568bd88) at
> >> memory/unix/apr_pools.c:772
> >> #20 0x00002ae2c715d4a0 in process_lingering_close (cs=0x1568c018,
> >> pfd=0x11880aa0) at event.c:1317
> >> #21 0x00002ae2c715e06c in listener_thread (thd=0x11881358,
> >> dummy=0x15638760) at event.c:1551
> >> #22 0x00002ae2bd9a04a9 in dummy_worker (opaque=0x11881358) at
> >> threadproc/unix/thread.c:142
> >> #23 0x000000305a20673d in start_thread () from
> /lib64/libpthread.so.0
> >> #24 0x00000030596d40cd in clone () from /lib64/libc.so.6
> >>
> >> The listener thread is running these cleanups, but that's not the
> >> thread that handled the connection.
> >>
> >
> > Jan Kaluza
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@perl.apache.org For
> additional
> > commands, e-mail: dev-h...@perl.apache.org
> >


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@perl.apache.org
For additional commands, e-mail: dev-h...@perl.apache.org

Reply via email to