On Mon, Mar 10, 2008 at 10:53:54PM -0700, Philippe M. Chiasson wrote: > >>Niko Tyni wrote: > >>>We're switching to Perl 5.10 in Debian soon, and I'm trying to update the > >>>mod_perl2 package to keep it working. Unfortunately the ModPerl-Registry > >>>test suite is failing on the Sparc architecture because apache2 is killed > >>>by a bus error (SIGBUS).
> How about this s/U16/U32/ diff, basically keeping the flag type at U32, > since it was not an essential part of the fix itself. No, that doesn't help either. It turns out the U16/U32 thing was a bad guess on my part. After some code staring and debugging, I found the real bug. It's not architecture-specific really, it just happens to bite worst on Sparc. The non-void function modperl_thx_interp_get() function is doing a plain 'return;' when it means to 'return NULL;'. The result is that the MP_APR_POOL_SV_TAKES_OWNERSHIP() macro increments a more or less random memory location, in this case my_perl->tScopestack aka. PL_scopestack, making it non-aligned as a side effect. Patch attached; this fixes the bus error for me. Cheers, -- Niko Tyni [EMAIL PROTECTED]
Index: src/modules/perl/modperl_interp.c =================================================================== --- src/modules/perl/modperl_interp.c (revision 635485) +++ src/modules/perl/modperl_interp.c (working copy) @@ -581,7 +581,7 @@ modperl_interp_t *interp; dTHXa(thx); SV **svp = hv_fetch(PL_modglobal, MP_THX_INTERP_KEY, strlen(MP_THX_INTERP_KEY), 0); - if (!svp) return; + if (!svp) return NULL; interp = INT2PTR(modperl_interp_t *, SvIV(*svp)); return interp; }