You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by go...@apache.org on 2008/01/28 09:01:58 UTC
svn commit: r615751 - in /perl/modperl/trunk: ./ src/modules/perl/
xs/Apache2/Filter/ xs/tables/current/ModPerl/
Author: gozer
Date: Mon Jan 28 00:01:57 2008
New Revision: 615751
URL: http://svn.apache.org/viewvc?rev=615751&view=rev
Log:
Fix erratic behaviour when filters were used with Perl 5.10.
Get rid of MP_CODE_ATTRS and re-implement it as modperl_code_attrs(aTHX_ CV *cv)
relying on magic instead of some obscure CV field CvXSUBANY we were piggybacking,
and hoping nobody was using (It was used in perl 5.10)
Modified:
perl/modperl/trunk/Changes
perl/modperl/trunk/src/modules/perl/mod_perl.h
perl/modperl/trunk/src/modules/perl/modperl_mgv.c
perl/modperl/trunk/src/modules/perl/modperl_types.h
perl/modperl/trunk/src/modules/perl/modperl_util.c
perl/modperl/trunk/src/modules/perl/modperl_util.h
perl/modperl/trunk/xs/Apache2/Filter/Apache2__Filter.h
perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm
Modified: perl/modperl/trunk/Changes
URL: http://svn.apache.org/viewvc/perl/modperl/trunk/Changes?rev=615751&r1=615750&r2=615751&view=diff
==============================================================================
--- perl/modperl/trunk/Changes (original)
+++ perl/modperl/trunk/Changes Mon Jan 28 00:01:57 2008
@@ -12,6 +12,9 @@
=item 2.0.4-dev
+Fix erratic behaviour when filters were used with Perl 5.10
+[Gozer]
+
Fix problems with redefinitions of perl_free as free and perl_malloc
as malloc on Win32, as described at
http://marc.info/?l=apache-modperl&m=119896407510526&w=2
Modified: perl/modperl/trunk/src/modules/perl/mod_perl.h
URL: http://svn.apache.org/viewvc/perl/modperl/trunk/src/modules/perl/mod_perl.h?rev=615751&r1=615750&r2=615751&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/mod_perl.h (original)
+++ perl/modperl/trunk/src/modules/perl/mod_perl.h Mon Jan 28 00:01:57 2008
@@ -138,11 +138,6 @@
int modperl_response_handler(request_rec *r);
int modperl_response_handler_cgi(request_rec *r);
-/* betting on Perl*Handlers not using CvXSUBANY
- * mod_perl reuses this field for handler attributes
- */
-#define MP_CODE_ATTRS(cv) (CvXSUBANY((CV*)cv).any_i32)
-
#define MgTypeExt(mg) (mg->mg_type == '~')
typedef void MP_FUNC_NONSTD_T(modperl_var_modify_t) (apr_table_t *,
Modified: perl/modperl/trunk/src/modules/perl/modperl_mgv.c
URL: http://svn.apache.org/viewvc/perl/modperl/trunk/src/modules/perl/modperl_mgv.c?rev=615751&r1=615750&r2=615751&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/modperl_mgv.c (original)
+++ perl/modperl/trunk/src/modules/perl/modperl_mgv.c Mon Jan 28 00:01:57 2008
@@ -271,7 +271,7 @@
}
else {
if ((cv = get_cv(name, FALSE))) {
- handler->attrs = (U32)MP_CODE_ATTRS(cv);
+ handler->attrs = *modperl_code_attrs(aTHX_ cv);
handler->mgv_cv =
modperl_mgv_compile(aTHX_ p, HvNAME(GvSTASH(CvGV(cv))));
modperl_mgv_append(aTHX_ p, handler->mgv_cv, GvNAME(CvGV(cv)));
@@ -334,7 +334,7 @@
modperl_mgv_new_name(handler->mgv_obj, p, name);
}
- handler->attrs = (U32)MP_CODE_ATTRS(cv);
+ handler->attrs = *modperl_code_attrs(aTHX_ cv);
/* note: this is the real function after @ISA lookup */
handler->mgv_cv = modperl_mgv_compile(aTHX_ p, HvNAME(GvSTASH(gv)));
modperl_mgv_append(aTHX_ p, handler->mgv_cv, handler_name);
Modified: perl/modperl/trunk/src/modules/perl/modperl_types.h
URL: http://svn.apache.org/viewvc/perl/modperl/trunk/src/modules/perl/modperl_types.h?rev=615751&r1=615750&r2=615751&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/modperl_types.h (original)
+++ perl/modperl/trunk/src/modules/perl/modperl_types.h Mon Jan 28 00:01:57 2008
@@ -195,7 +195,7 @@
const char *name;
CV *cv;
U8 flags;
- U32 attrs;
+ U16 attrs;
modperl_handler_t *next;
};
Modified: perl/modperl/trunk/src/modules/perl/modperl_util.c
URL: http://svn.apache.org/viewvc/perl/modperl/trunk/src/modules/perl/modperl_util.c?rev=615751&r1=615750&r2=615751&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/modperl_util.c (original)
+++ perl/modperl/trunk/src/modules/perl/modperl_util.c Mon Jan 28 00:01:57 2008
@@ -899,3 +899,14 @@
}
return newRV_inc((SV *)*pnotes);
}
+
+U16 *modperl_code_attrs(pTHX_ CV *cv) {
+ MAGIC *mg;
+
+ if (!SvMAGICAL(cv)) {
+ sv_magic((SV*)cv, Nullsv, PERL_MAGIC_ext, NULL, -1);
+ }
+
+ mg = mg_find((SV*)cv, PERL_MAGIC_ext);
+ return &(mg->mg_private);
+}
Modified: perl/modperl/trunk/src/modules/perl/modperl_util.h
URL: http://svn.apache.org/viewvc/perl/modperl/trunk/src/modules/perl/modperl_util.h?rev=615751&r1=615750&r2=615751&view=diff
==============================================================================
--- perl/modperl/trunk/src/modules/perl/modperl_util.h (original)
+++ perl/modperl/trunk/src/modules/perl/modperl_util.h Mon Jan 28 00:01:57 2008
@@ -149,4 +149,6 @@
SV *modperl_pnotes(pTHX_ HV **pnotes, SV *key, SV *val,
request_rec *r, conn_rec *c);
+U16 *modperl_code_attrs(pTHX_ CV *cv);
+
#endif /* MODPERL_UTIL_H */
Modified: perl/modperl/trunk/xs/Apache2/Filter/Apache2__Filter.h
URL: http://svn.apache.org/viewvc/perl/modperl/trunk/xs/Apache2/Filter/Apache2__Filter.h?rev=615751&r1=615750&r2=615751&view=diff
==============================================================================
--- perl/modperl/trunk/xs/Apache2/Filter/Apache2__Filter.h (original)
+++ perl/modperl/trunk/xs/Apache2/Filter/Apache2__Filter.h Mon Jan 28 00:01:57 2008
@@ -86,9 +86,9 @@
return len;
}
-static MP_INLINE U32 *modperl_filter_attributes(SV *package, SV *cvrv)
+static MP_INLINE U16 *modperl_filter_attributes(pTHX_ SV *package, SV *cvrv)
{
- return (U32 *)&MP_CODE_ATTRS(SvRV(cvrv));
+ return modperl_code_attrs(aTHX_ (CV*)SvRV(cvrv));
}
#ifdef MP_TRACE
@@ -118,7 +118,7 @@
MP_STATIC XS(MPXS_modperl_filter_attributes)
{
dXSARGS;
- U32 *attrs = modperl_filter_attributes(ST(0), ST(1));
+ U16 *attrs = modperl_filter_attributes(aTHX_ ST(0), ST(1));
I32 i;
#ifdef MP_TRACE
HV *stash = gv_stashsv(ST(0), TRUE);
Modified: perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm
URL: http://svn.apache.org/viewvc/perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm?rev=615751&r1=615750&r2=615751&view=diff
==============================================================================
--- perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm (original)
+++ perl/modperl/trunk/xs/tables/current/ModPerl/FunctionTable.pm Mon Jan 28 00:01:57 2008
@@ -1239,6 +1239,20 @@
]
},
{
+ 'return_type' => 'U16 *',
+ 'name' => 'modperl_code_attrs',
+ 'args' => [
+ {
+ 'type' => 'PerlInterpreter *',
+ 'name' => 'my_perl'
+ },
+ {
+ 'type' => 'CV *',
+ 'name' => 'cv'
+ }
+ ]
+ },
+ {
'return_type' => 'int',
'name' => 'modperl_config_apply_PerlModule',
'args' => [