Author: gozer
Date: Thu May 12 07:22:19 2005
New Revision: 169826
URL: http://svn.apache.org/viewcvs?rev=169826&view=rev
Log:
Reintroduce a pure-Perl version of ModPerl::Util::unload_package()
The problematic XS version is now called unload_package_xs() and
not used by default.
Enable the XS version back by defaults with:
$ModPerl::Util::DEFAULT_UNLOAD_METHOD = 'unload_package_xs';
Added:
perl/modperl/trunk/xs/ModPerl/Util/Util_pm
Modified:
perl/modperl/trunk/Changes
perl/modperl/trunk/todo/bugs_mp
perl/modperl/trunk/todo/release
perl/modperl/trunk/xs/ModPerl/Util/ModPerl__Util.h
perl/modperl/trunk/xs/maps/modperl_functions.map
Modified: perl/modperl/trunk/Changes
URL:
http://svn.apache.org/viewcvs/perl/modperl/trunk/Changes?rev=169826&r1=169825&r2=169826&view=diff
==============================================================================
--- perl/modperl/trunk/Changes (original)
+++ perl/modperl/trunk/Changes Thu May 12 07:22:19 2005
@@ -12,6 +12,10 @@
=item 1.999_24-dev
+Reintroduce a pure-Perl version of ModPerl::Util::unload_package()
+The problematic XS version is now called unload_package_xs() and
+not used by default [Gozer]
+
More APR::Status wrappers: [Stas, Randy Kobes]
- is_EOF
- is_ECONNABORTED
Modified: perl/modperl/trunk/todo/bugs_mp
URL:
http://svn.apache.org/viewcvs/perl/modperl/trunk/todo/bugs_mp?rev=169826&r1=169825&r2=169826&view=diff
==============================================================================
--- perl/modperl/trunk/todo/bugs_mp (original)
+++ perl/modperl/trunk/todo/bugs_mp Thu May 12 07:22:19 2005
@@ -113,3 +113,8 @@
* mpxs_Apache2__RequestRec_GETC in Apache_RequestIO.h is out to be
reimplemented similar to read() w/o using the deprecated
client_block interface
+
+* Segfaults under Apache::Reload (could be uncovering a bug in mp):
+ http://marc.theaimsgroup.com/?t=111145169900002&r=1&w=2
+ owner: gozer
+-
Modified: perl/modperl/trunk/todo/release
URL:
http://svn.apache.org/viewcvs/perl/modperl/trunk/todo/release?rev=169826&r1=169825&r2=169826&view=diff
==============================================================================
--- perl/modperl/trunk/todo/release (original)
+++ perl/modperl/trunk/todo/release Thu May 12 07:22:19 2005
@@ -5,12 +5,6 @@
-- see also todo/api_status
-- see also todo/release-checklist
-Segfaults under Apache::Reload (could be uncovering a bug in mp):
-http://marc.theaimsgroup.com/?t=111145169900002&r=1&w=2
-owner: gozer
-
--------------
-
someone has asked to make $r->request_time settable
-------------
Modified: perl/modperl/trunk/xs/ModPerl/Util/ModPerl__Util.h
URL:
http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/ModPerl/Util/ModPerl__Util.h?rev=169826&r1=169825&r2=169826&view=diff
==============================================================================
--- perl/modperl/trunk/xs/ModPerl/Util/ModPerl__Util.h (original)
+++ perl/modperl/trunk/xs/ModPerl/Util/ModPerl__Util.h Thu May 12 07:22:19 2005
@@ -35,7 +35,7 @@
#define mpxs_ModPerl__Util_current_callback \
modperl_callback_current_callback_get
-#define mpxs_ModPerl__Util_unload_package(pkg) \
+#define mpxs_ModPerl__Util_unload_package_xs(pkg) \
modperl_package_unload(aTHX_ pkg)
/* ModPerl::Util::exit lives in mod_perl.so, see modperl_perl.c */
Added: perl/modperl/trunk/xs/ModPerl/Util/Util_pm
URL:
http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/ModPerl/Util/Util_pm?rev=169826&view=auto
==============================================================================
--- perl/modperl/trunk/xs/ModPerl/Util/Util_pm (added)
+++ perl/modperl/trunk/xs/ModPerl/Util/Util_pm Thu May 12 07:22:19 2005
@@ -0,0 +1,57 @@
+#Extra stuff
+
+our $DEFAULT_UNLOAD_METHOD ||= "unload_package_pp";
+
+sub unload_package {
+ goto &$DEFAULT_UNLOAD_METHOD;
+}
+
+sub unload_package_pp {
+ my $package = shift;
+ no strict 'refs';
+ my $tab = \%{ $package . '::' };
+
+ # below we assign to a symbol first before undef'ing it, to avoid
+ # nuking aliases. If we undef directly we may undef not only the
+ # alias but the original function as well
+
+ for (keys %$tab) {
+ my $fullname = join '::', $package, $_;
+ # code/hash/array/scalar might be imported make sure the gv
+ # does not point elsewhere before undefing each
+ if (%$fullname) {
+ *{$fullname} = {};
+ undef %$fullname;
+ }
+ if (@$fullname) {
+ *{$fullname} = [];
+ undef @$fullname;
+ }
+ if ($$fullname) {
+ my $tmp; # argh, no such thing as an anonymous scalar
+ *{$fullname} = \$tmp;
+ undef $$fullname;
+ }
+ if (defined &$fullname) {
+ no warnings;
+ local $^W = 0;
+ if (defined(my $p = prototype $fullname)) {
+ *{$fullname} = eval "sub ($p) {}";
+ }
+ else {
+ *{$fullname} = sub {};
+ }
+ undef &$fullname;
+ }
+ if (*{$fullname}{IO}) {
+ if (fileno $fullname) {
+ close $fullname;
+ }
+ }
+ }
+
+ #Wipe from %INC
+ $package =~ s[::][/]g;
+ $package .= '.pm';
+ delete $INC{$package};
+}
Modified: perl/modperl/trunk/xs/maps/modperl_functions.map
URL:
http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/maps/modperl_functions.map?rev=169826&r1=169825&r2=169826&view=diff
==============================================================================
--- perl/modperl/trunk/xs/maps/modperl_functions.map (original)
+++ perl/modperl/trunk/xs/maps/modperl_functions.map Thu May 12 07:22:19 2005
@@ -7,7 +7,7 @@
mpxs_ModPerl__Util_untaint | | ...
SV *:DEFINE_current_perl_id
char *:DEFINE_current_callback
- DEFINE_unload_package | | const char *:package
+ DEFINE_unload_package_xs | | const char *:package
MODULE=ModPerl::Global
mpxs_ModPerl__Global_special_list_call