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' => [