On 05/14/2015 11:24 AM, Niko Tyni wrote:
On Sun, May 10, 2015 at 01:47:19PM +0100, Steve Hay wrote:
On 28 April 2015 at 07:51,  <jkal...@apache.org> wrote:
Author: jkaluza
Date: Tue Apr 28 06:51:12 2015
New Revision: 1676417

URL: http://svn.apache.org/r1676417
Log:
Initialize interp->refcnt to 1 in modperl_interp_select.

I cannot understand why, but since this patch was applied I find that
t\modules\proxy.t fails every time when I run the full "nmake test",
but it always succeeds when I run it in isolation so I'm at a loss to
find out what is going wrong. All other tests (apart from those known
Win32-specific failures documented in README) still pass. Reverting
the patch "fixes" the proxy.t problem, but probably isn't the right
solution.

It's caused by Perl_croak/modperl_croak.

Lets take modperl_run_filter as an example. When following code-path is executed ...

                modperl_croak(aTHX_ MODPERL_FILTER_ERROR,
                              "a filter calling $f->read "
                              "must return OK and not DECLINED");

... the MP_INTERP_PUTBACK is not reached for some reason (I presume it's because of Perl_croak, but I don't understand why it stops the execution of the rest of modperl_run_filter method).

Because of that, the interp->refcnt is not decreased, and the interp is not freed.

I has been able to "fix" it by attached patch, but I would like to discuss more generic way how to fix that problem...

Any ideas?

Regards,
Jan Kaluza

As a data point, this also seems to happen with 2.0.9-RC1 on Debian
kfreebsd-amd64.

   
https://buildd.debian.org/status/fetch.php?pkg=libapache2-mod-perl2&arch=kfreebsd-amd64&ver=2.0.9~rc1-1&stamp=1431587841

   request has failed (the response code was: 502)
   see t/logs/error_log for more details
   t/modules/proxy.t .......................
   # connecting to http://localhost:8538/TestModules__proxy
   1..1
   # Running under perl version 5.020002 for gnukfreebsd
   # Current time local: Thu May 14 07:15:21 2015
   # Current time GMT:   Thu May 14 07:15:21 2015
   # Using Test.pm version 1.26
   # Using Apache/Test.pm version 1.39
   Dubious, test returned 2 (wstat 512, 0x200)
   Failed 1/1 subtests

I haven't been able to test yet whether it's reproducible there.


Index: src/modules/perl/modperl_filter.c
===================================================================
--- src/modules/perl/modperl_filter.c	(revision 1679170)
+++ src/modules/perl/modperl_filter.c	(working copy)
@@ -535,6 +535,7 @@
                  * pass the bucket brigade through after it called
                  * $f->read(), since it causes a pre-fetch of the
                  * bb */
+                interp->refcnt--;
                 modperl_croak(aTHX_ MODPERL_FILTER_ERROR,
                               "a filter calling $f->read "
                               "must return OK and not DECLINED");

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

Reply via email to