
torsten at apache
Jun 29, 2008, 10:21 AM
Post #1 of 1
(1151 views)
Permalink
|
|
svn commit: r672647 - in /perl/modperl/branches/threading: ./ ModPerl-Registry/t/conf/ lib/ lib/Apache2/ lib/ModPerl/ src/modules/perl/ t/apr/ t/filter/ t/filter/TestFilter/ t/hooks/ t/hooks/TestHooks/ t/modperl/ t/modules/ t/perl/ t/response/TestAPI/ ...
|
|
Author: torsten Date: Sun Jun 29 10:21:27 2008 New Revision: 672647 URL: http://svn.apache.org/viewvc?rev=672647&view=rev Log: Merged revisions 594682,594786,606232,606831,606833,606835,606980,607687,607690,607692-607694,607697,609090,614146,615741,615751,617965,620440,628249,628251,628359,629672,630597,630678-630679,632247,636631,648961,648975,648991,649412,654655,654922,654924,656819,659866,672484 via svnmerge from https://svn.eu.apache.org/repos/asf/perl/modperl/trunk ........ r594682 | gozer | 2007-11-13 23:43:25 +0100 (Tue, 13 Nov 2007) | 4 lines Simplify this test, using keepalives instead of the same_interp stuff works just fine. And it's simpler. This one is for Fred. ........ r594786 | phred | 2007-11-14 07:47:39 +0100 (Wed, 14 Nov 2007) | 2 lines We no longer need TestCommon::SameInterp here. ........ r606232 | phred | 2007-12-21 17:18:24 +0100 (Fri, 21 Dec 2007) | 7 lines Apache2::Reload is being moved to an externally maintained CPAN distribution. Apache::Reload has been graciously donated to the ASF by Matt Sergeant. This commit is part of an svn mv of related files to that distribution. Reviewed in different parts by: Phillip Gollucci, Gozer, Geoff ........ r606831 | phred | 2007-12-26 03:50:29 +0100 (Wed, 26 Dec 2007) | 3 lines Refactor to use keep_alives instead of TestCommon::SameInterp. As done originally in revision 594682 at ApacheCon 2007 ........ r606833 | phred | 2007-12-26 03:55:37 +0100 (Wed, 26 Dec 2007) | 3 lines Now that we are using keepalives, it doen't make sense to retain the t_debug statement, since that is implicit in the test configuration. ........ r606835 | phred | 2007-12-26 04:08:19 +0100 (Wed, 26 Dec 2007) | 3 lines Refactor additional tests to use keepalives instead of same_interp. See revision 594682 for additional details. ........ r606980 | phred | 2007-12-27 01:09:57 +0100 (Thu, 27 Dec 2007) | 4 lines Remove sameinterp mechanism in favor of using keepalives in the test client to reuse the same modperl interpreter for subsequent requests. See revision 606831 for the details. ........ r607687 | gozer | 2007-12-31 07:48:57 +0100 (Mon, 31 Dec 2007) | 11 lines Fix a crash when running a sub-request from within a filter where mod_perl was not the content handler. Running modperl_wbucket_flush(rcfg->wbucket) before the subrequest is run ensures we've flushed our own content handler if it has any data in the pipeline. Problem was rcfg->wbucket will not be set if we are not the content handler. Solution is to avoid the flush in that particular case. ........ r607690 | gozer | 2007-12-31 08:20:50 +0100 (Mon, 31 Dec 2007) | 8 lines *Whitespace* delete trailing spaces and trailing empty lines Reviewed-By: gozer Submitted-By: Torsten Foertsch <torsten.foertsch [at] gmx> Message-Id: <200712031333.33760.torsten.foertsch [at] gmx> ........ r607692 | gozer | 2007-12-31 08:31:16 +0100 (Mon, 31 Dec 2007) | 8 lines *Whitespace* expands tabs in C files Reviewed-by: gozer Submitted-by: Torsten Foertsch <torsten.foertsch [at] gmx> Message-Id: <200712031335.12088.torsten.foertsch [at] gmx> ........ r607693 | gozer | 2007-12-31 08:36:46 +0100 (Mon, 31 Dec 2007) | 8 lines *Whitespace* removes trailing whitespace and expands tabs in t/*.t Reviewed-by: gozer Submitted-by: Torsten Foertsch <torsten.foertsch [at] gmx> Message-Id: <200712031344.12974.torsten.foertsch [at] gmx> ........ r607694 | gozer | 2007-12-31 08:49:31 +0100 (Mon, 31 Dec 2007) | 8 lines *Whitespace* remove trailing newlines from MP_TRACE_x calls Reviewed-by: gozer Submitted-by: Torsten Foertsch <torsten.foertsch [at] gmx> Message-Id: <200712031624.15772.torsten.foertsch [at] gmx> ........ r607697 | gozer | 2007-12-31 09:05:11 +0100 (Mon, 31 Dec 2007) | 9 lines *Whitespace* Cleanup trailing whitespace, whitespace-only lines and litteral tab characters. Reviewed-By: gozer Submitted-by: Torsten Foertsch <torsten.foertsch [at] gmx> Message-Id: <200712031336.22019.torsten.foertsch [at] gmx> ........ r609090 | randyk | 2008-01-05 05:46:50 +0100 (Sat, 05 Jan 2008) | 4 lines 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 [Tom Donovan] ........ r614146 | gozer | 2008-01-22 09:33:54 +0100 (Tue, 22 Jan 2008) | 4 lines Simplify the test as well as handle all possible Perl version numbers possible. (5.10.0 for instance) ........ r615741 | gozer | 2008-01-28 08:21:58 +0100 (Mon, 28 Jan 2008) | 1 line whitespace (realign) ........ r615751 | gozer | 2008-01-28 09:01:57 +0100 (Mon, 28 Jan 2008) | 7 lines 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) ........ r617965 | gozer | 2008-02-03 10:10:04 +0100 (Sun, 03 Feb 2008) | 4 lines Apache::Reload isn't part of the core anymore, so don't expect it to be available. ........ r620440 | gozer | 2008-02-11 09:51:08 +0100 (Mon, 11 Feb 2008) | 13 lines Fix a crash when spawning Perl threads under Perl 5.10. The way we used to stash a pointer to the current modperl_interp_t into the current PerlInterpreter * relied on HvPMROOT or stashing things in unused fields of PL_modglobal. This borked under 5.10, as there was no unused fields left to use, and things had moved from under our feet. This patches changes the implementation to using PL_modglobal, a per-interpreter hash specifically designed for this purpose. ........ r628249 | gozer | 2008-02-16 08:59:54 +0100 (Sat, 16 Feb 2008) | 8 lines Remove strange, leftover 'static' declaration. Surprising this is even valid C Reported-By: Randy Kobes <randy [at] theoryx5> Message-ID: <Pine.LNX.4.64.0802151447160.11691 [at] theoryx5> ........ r628251 | gozer | 2008-02-16 09:04:46 +0100 (Sat, 16 Feb 2008) | 8 lines Sprinkle a few missing #ifdefs introduced by the recently introduced Perl 5.10 changes when building without ithreads. Reviewed-By: gozer Submitted-By: Randy Kobes <randy [at] theoryx5> Message-ID: <Pine.LNX.4.64.0802151447160.11691 [at] theoryx5 ........ r628359 | randyk | 2008-02-16 17:59:58 +0100 (Sat, 16 Feb 2008) | 2 lines replace & by & ........ r629672 | randyk | 2008-02-21 02:54:21 +0100 (Thu, 21 Feb 2008) | 2 lines Add Apache::request, using Apache2::compat::request, as discussed at http://marc.info/?t=120291200200005&r=1&w=2 ........ r630597 | gozer | 2008-02-24 08:23:16 +0100 (Sun, 24 Feb 2008) | 9 lines Fix a possible $r->location curruption. Sometimes, the path copied into $r->location would end it's life before $r. Reviewed-By: gozer Submitted-By: Torsten Foertsch <torsten.foertsch [at] gmx> Message-ID: <200802182200.40934.torsten.foertsch [at] gmx> ........ r630678 | phred | 2008-02-24 21:49:58 +0100 (Sun, 24 Feb 2008) | 2 lines Update svn:external list to include Apache::Reload and Apache::SizeLimit ........ r630679 | phred | 2008-02-24 21:57:23 +0100 (Sun, 24 Feb 2008) | 1 line fix spelling error ........ r632247 | phred | 2008-02-29 08:20:31 +0100 (Fri, 29 Feb 2008) | 4 lines Revert earlier commit r630678, more needs to be done before the other modules can be added to external. Thought I committed this yesterday but it appears to have not gone through. ........ r636631 | gozer | 2008-03-13 06:25:22 +0100 (Thu, 13 Mar 2008) | 7 lines Fix a subtle typo. return; is mostly undefined, try return NULL instead. Reviewed-By: gozer Submitted-By: Niko Tyni <ntyni+modperl [at] mappi> Message-ID: <20080312074100.GA6486 [at] rebekk> ........ r648961 | gozer | 2008-04-17 08:05:15 +0200 (Thu, 17 Apr 2008) | 1 line Releasing 2.0.4 ........ r648975 | gozer | 2008-04-17 08:37:13 +0200 (Thu, 17 Apr 2008) | 1 line start 2.0.4-dev cycle ........ r648991 | gozer | 2008-04-17 10:02:01 +0200 (Thu, 17 Apr 2008) | 3 lines Cleanup the RELEASE instructions for next time. ........ r649412 | gozer | 2008-04-18 10:53:11 +0200 (Fri, 18 Apr 2008) | 8 lines Make sure mod_perl's own ChildInitHandlers are run before user supplied ones. This fixes the incorrectly reported value of $$ at ChildInit time Reported-By: Mark Blackman <mark [at] blackmans> Message-Id: <885FBA59-E411-48B5-8F12-D650720FF40F [at] blackmans> ........ r654655 | pgollucci | 2008-05-09 01:49:16 +0200 (Fri, 09 May 2008) | 7 lines Fix compiles with non-threaded APRs. Reported by: pgollucci, Simon Bertrang <janus [at] errornet> Submitted by: gozer, Simon Bertrang <janus [at] errornet> Reviewed by: pgollucci ........ r654922 | pgollucci | 2008-05-09 22:01:17 +0200 (Fri, 09 May 2008) | 3 lines mp 2.0 came and went ........ r654924 | pgollucci | 2008-05-09 22:08:39 +0200 (Fri, 09 May 2008) | 3 lines these are done ........ r656819 | pgollucci | 2008-05-15 22:31:31 +0200 (Thu, 15 May 2008) | 3 lines adding so we don't forget ........ r659866 | phred | 2008-05-24 22:15:30 +0200 (Sat, 24 May 2008) | 3 lines Add some questions, add Apache::Test 1.31 goal, add current devs who have starting working on those issues. ........ r672484 | torsten | 2008-06-28 11:45:31 +0200 (Sat, 28 Jun 2008) | 1 line change "XSLoader::load(@_)" to "goto &XSLoader::load" in {APR,Apache2}::XSLoader ........ Added: perl/modperl/branches/threading/t/filter/TestFilter/with_subrequest.pm - copied unchanged from r672484, perl/modperl/trunk/t/filter/TestFilter/with_subrequest.pm perl/modperl/branches/threading/t/filter/with_subrequest.t - copied unchanged from r672484, perl/modperl/trunk/t/filter/with_subrequest.t perl/modperl/branches/threading/todo/2.0.5 - copied unchanged from r672484, perl/modperl/trunk/todo/2.0.5 Removed: perl/modperl/branches/threading/lib/Apache2/Reload.pm perl/modperl/branches/threading/t/modperl/sameinterp.t perl/modperl/branches/threading/t/modules/reload.t perl/modperl/branches/threading/t/response/TestModperl/sameinterp.pm perl/modperl/branches/threading/t/response/TestModules/reload.pm perl/modperl/branches/threading/todo/release-checklist Modified: perl/modperl/branches/threading/ (props changed) perl/modperl/branches/threading/Changes perl/modperl/branches/threading/Makefile.PL perl/modperl/branches/threading/ModPerl-Registry/t/conf/extra.conf.in perl/modperl/branches/threading/README perl/modperl/branches/threading/RELEASE perl/modperl/branches/threading/STATUS perl/modperl/branches/threading/SVN-MOVE perl/modperl/branches/threading/lib/Apache2/compat.pm perl/modperl/branches/threading/lib/ModPerl/BuildMM.pm perl/modperl/branches/threading/lib/ModPerl/WrapXS.pm perl/modperl/branches/threading/lib/mod_perl2.pm perl/modperl/branches/threading/src/modules/perl/mod_perl.c perl/modperl/branches/threading/src/modules/perl/mod_perl.h perl/modperl/branches/threading/src/modules/perl/modperl_apache_compat.h perl/modperl/branches/threading/src/modules/perl/modperl_callback.c perl/modperl/branches/threading/src/modules/perl/modperl_config.c perl/modperl/branches/threading/src/modules/perl/modperl_config.h perl/modperl/branches/threading/src/modules/perl/modperl_interp.c perl/modperl/branches/threading/src/modules/perl/modperl_interp.h perl/modperl/branches/threading/src/modules/perl/modperl_mgv.c perl/modperl/branches/threading/src/modules/perl/modperl_perl_includes.h perl/modperl/branches/threading/src/modules/perl/modperl_svptr_table.c perl/modperl/branches/threading/src/modules/perl/modperl_types.h perl/modperl/branches/threading/src/modules/perl/modperl_util.c perl/modperl/branches/threading/src/modules/perl/modperl_util.h perl/modperl/branches/threading/t/apr/pool_lifetime.t perl/modperl/branches/threading/t/hooks/TestHooks/inlined_handlers.pm perl/modperl/branches/threading/t/hooks/inlined_handlers.t perl/modperl/branches/threading/t/modperl/cookie.t perl/modperl/branches/threading/t/modperl/cookie2.t perl/modperl/branches/threading/t/modperl/request_rec_perlio_api.t perl/modperl/branches/threading/t/modules/apache_status.t perl/modperl/branches/threading/t/perl/ithreads3.t perl/modperl/branches/threading/t/response/TestAPI/add_config.pm perl/modperl/branches/threading/t/response/TestAPR/pool_lifetime.pm perl/modperl/branches/threading/t/response/TestModperl/cookie.pm perl/modperl/branches/threading/t/response/TestModperl/cookie2.pm perl/modperl/branches/threading/t/response/TestModperl/request_rec_perlio_api.pm perl/modperl/branches/threading/t/response/TestPerl/ithreads3.pm perl/modperl/branches/threading/xs/APR/Pool/APR__Pool.h perl/modperl/branches/threading/xs/Apache2/Filter/Apache2__Filter.h perl/modperl/branches/threading/xs/Apache2/SubRequest/Apache2__SubRequest.h perl/modperl/branches/threading/xs/ModPerl/Interpreter/ModPerl__Interpreter.h perl/modperl/branches/threading/xs/tables/current/ModPerl/FunctionTable.pm Propchange: perl/modperl/branches/threading/ ------------------------------------------------------------------------------ svn:mergeinfo = /perl/modperl/trunk:594682-672484 Propchange: perl/modperl/branches/threading/ ------------------------------------------------------------------------------ --- svnmerge-integrated (original) +++ svnmerge-integrated Sun Jun 29 10:21:27 2008 @@ -1 +1 @@ -/perl/modperl/trunk:1-588158 +/perl/modperl/trunk:1-672628 Modified: perl/modperl/branches/threading/Changes URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/Changes?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/Changes (original) +++ perl/modperl/branches/threading/Changes Sun Jun 29 10:21:27 2008 @@ -10,7 +10,7 @@ =over 3 -=item 2.0.4-dev +=item 2.0.5-dev PerlInterpScope is now more advisory. Using $(c|r)->pnotes will bind the current interpreter to that object for it's lifetime. @@ -29,11 +29,45 @@ Expose modperl_interp_t via ModPerl::Interpreter [Torsten Foertsch] +Fix a problem that could make APR::XSLoader and Apache2::XSLoader +load the wrong shared library. [Torsten Foertsch] + +Fix compilation when using a non-threaded APR. +[Gozer, Philip M. Gollucci] + +Make sure mod_perl's own ChildInitHandlers are run before user +supplied ones. This fixes the incorrectly reported value of $$ +at ChildInit time [Gozer] + +=item 2.0.4 April 16, 2008 + +Fix $r->location corruption under certain conditions +[Gozer] + +Fix a crash when spawning Perl threads under Perl 5.10 +[Gozer] + +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 +[Tom Donovan] + +Fix a crash when running a sub-request from within a filter where +mod_perl was not the content handler. [Gozer] + +Refactor tests to use keepalives instead of same_interp [Gozer, Phred] + +Apache2::Reload has been moved to an externally maintained +CPAN distribution [Fred Moyer <fred [at] redhotpenguin>] + PerlCleanupHandler are now registered with a subpool of $r->pool, instead of $r->pool itself, ensuring they run _before_ any other $r->pool cleanups [Torsten Foertsch] -Fix a bug that would prevent pnotes from being cleaned up proprely +Fix a bug that would prevent pnotes from being cleaned up properly at the end of the request [Torsten Foertsch] n Win32, embed the manifest file, if present, in mod_perl.so, Modified: perl/modperl/branches/threading/Makefile.PL URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/Makefile.PL?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/Makefile.PL (original) +++ perl/modperl/branches/threading/Makefile.PL Sun Jun 29 10:21:27 2008 @@ -817,7 +817,6 @@ tag : svn copy https://svn.apache.org/repos/asf/perl/modperl/trunk https://svn.apache.org/repos/asf/perl/modperl/tags/$(VERSION_SYM) svn copy https://svn.apache.org/repos/asf/perl/modperl/docs/trunk https://svn.apache.org/repos/asf/perl/modperl/docs/tags/$(VERSION_SYM) - @$(ECHO) update mod_perl2.pm VERSION now EOF return $string; Modified: perl/modperl/branches/threading/ModPerl-Registry/t/conf/extra.conf.in URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/ModPerl-Registry/t/conf/extra.conf.in?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/ModPerl-Registry/t/conf/extra.conf.in (original) +++ perl/modperl/branches/threading/ModPerl-Registry/t/conf/extra.conf.in Sun Jun 29 10:21:27 2008 @@ -21,12 +21,6 @@ # run on startup PerlRequire @ServerRoot@/conf/modperl_extra_startup.pl -#### DEVMODE: Remove in production ### -PerlModule Apache2::Reload -PerlInitHandler Apache2::Reload -PerlSetVar ReloadAll Off -PerlSetVar ReloadModules "ModPerl::*" - PerlSetVar ModPerl::RegistryCooker::DEBUG 2 PerlModule ModPerl::RegistryCooker Modified: perl/modperl/branches/threading/README URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/README?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/README (original) +++ perl/modperl/branches/threading/README Sun Jun 29 10:21:27 2008 @@ -3,8 +3,8 @@ *** Prerequisites *** Apache: - Dynamic mod_perl (DSO): Apache 2.0.47 - 2.0.59. - Static mod_perl: Apache 2.0.51 - 2.0.59. + Dynamic mod_perl (DSO): Apache 2.0.47 - 2.2.8. + Static mod_perl: Apache 2.0.51 - 2.2.8. Newer Apache versions may work with this version of mod_perl. If not, the svn version likely will, which can be obtained from: Modified: perl/modperl/branches/threading/RELEASE URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/RELEASE?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/RELEASE (original) +++ perl/modperl/branches/threading/RELEASE Sun Jun 29 10:21:27 2008 @@ -30,7 +30,7 @@ make sure you give the correct permissions to them. 1. 'make dist' - to make sure nothing is missing from the manifest, - etc. Now test this generated package mod_perl-2.0.4.tar.gz (not + etc. Now test this generated package mod_perl-2.0.5.tar.gz (not the current build) with as many configurations as possible on as many platforms as possible, unpacking the package each time afresh. @@ -55,7 +55,7 @@ to the modperl/dev list (may be longer to give most people a chance to catch up). no need to tag this package - Subject: [RELEASE CANDIDATE]: mod_perl-2.0.4 RC\d+ + Subject: [RELEASE CANDIDATE]: mod_perl-2.0.5 RC\d+ 2a. if problems are detected during stage 2, repeat stages 1 and 2. @@ -75,59 +75,68 @@ % make -n tag d. commit Changes README Makefile.PL - % svn ci Changes README Makefile.PL + % svn ci -m "Releasing 2.0.5" Changes README Makefile.PL e. tag % make tag f. Update the svn:externals in the new tag (you can't propedit remotely yet in svn) - svn co https://svn.apache.org/repos/asf/perl/modperl/tags/2_0_3 - svn propedit svn:externals 2_0_3 - Update the Apache-Test line to the tag you previously created. + % svn co https://svn.apache.org/repos/asf/perl/modperl/tags/2_0_5 + % svn propedit svn:externals 2_0_5 + Update the Apache-Test line to current revision + % svn info https://svn.apache.org/repos/asf/perl/Apache-Test/trunk | grep "Last Changed Rev" Update the docs line to the current tag. - svn ci + It should look like: + % svn propget svn:externals 2_0_5 + Apache-Test -r 608229 https://svn.apache.org/repos/asf/perl/Apache-Test/trunk + docs https://svn.apache.org/repos/asf/perl/modperl/docs/tags/2_0_5/src/docs/2.0 + + % svn ci -m "Releasing 2.0.5" g. create the final package % make dist h. test the final package again at least once -4. Release the package and update links (e.g. mod_perl-2.0.4.tar.gz) +4. Release the package and update links (e.g. mod_perl-2.0.5.tar.gz) - a. upload to www.apache.org:/www/perl.apache.org/dist/ + a. upload to perl.apache.org:/www/perl.apache.org/dist/ - % scp mod_perl-2.0.4.tar.gz perl.apache.org:/www/perl.apache.org/dist/ + % scp mod_perl-2.0.5.tar.gz perl.apache.org:/www/perl.apache.org/dist/ b. ssh to perl.apache.org, unpack the package, update symlinks to the tar ball and unpacked distro: % ssh perl.apache.org % cd /www/perl.apache.org/dist/ - % ln -sf mod_perl-2.0.4.tar.gz mod_perl-2.0-current.tar.gz - % tar -xzvf mod_perl-2.0.4.tar.gz + % ln -sf mod_perl-2.0.5.tar.gz mod_perl-2.0-current.tar.gz + % tar -xzvf mod_perl-2.0.5.tar.gz % rm /www/perl.apache.org/dist/mod_perl-2.0-current - % ln -sf mod_perl-2.0.4 mod_perl-2.0-current + % ln -sf mod_perl-2.0.5 mod_perl-2.0-current c. archive older releases (keep current + one prior release) - % mv /www/perl.apache.org/dist/mod_perl-2.0.2.tar.gz \ + % mv /www/perl.apache.org/dist/mod_perl-2.0.3.tar.gz \ /www/perl.apache.org/dist/old - % mv /www/perl.apache.org/dist/mod_perl-2.0.2.tar.gz.asc \ + % mv /www/perl.apache.org/dist/mod_perl-2.0.3.tar.gz.asc \ /www/perl.apache.org/dist/old - % rm -rf /www/perl.apache.org/dist/mod_perl-2.0.2 - - d. update the version and release date - modperl-docs/src/download/index_top.html and commit. It'll be - automatically updated within 6 hours. Alternatively you can do a - manual update by logging into www.apache.org and running: + % rm -rf /www/perl.apache.org/dist/mod_perl-2.0.3 - % /home/perlwww/apache.org/modperl-docs/bin/site_build + d. update the version and release date in the docs: + % vi modperl-docs/src/download/index_top.html + % vi modperl-docs/doap_Perl.rdf - e. update our projects.apache.org doap file with the new release - version and date + and commit. + % svn ci -m "Releasing 2.0.5" \ + modperl-docs/src/download/index_top.html \ + modperl-docs/doap_Perl.rdf + + It'll be automatically updated within 6 hours. Alternatively + you can do a manual update by logging into www.apache.org and + running: - % vi modperl-docs/doap_Perl.rdf + % /home/perlwww/apache.org/modperl-docs/bin/site_build 5. Upload the package to CPAN @@ -138,33 +147,33 @@ a. sign your local copy of the tarball: - % gpg --detach-sign --armor mod_perl-2.0.4.tar.gz + % gpg --detach-sign --armor mod_perl-2.0.5.tar.gz - % pgps -b --armor mod_perl-2.0.4.tar.gz + % pgps -b --armor mod_perl-2.0.5.tar.gz - b. upload the generated sig file to www.apache.org: + b. upload the generated sig file to perl.apache.org: - % scp mod_perl-2.0.4.tar.gz.asc perl.apache.org:/www/perl.apache.org/dist/ - % ssh www.apache.org + % scp mod_perl-2.0.5.tar.gz.asc perl.apache.org:/www/perl.apache.org/dist/ + % ssh perl.apache.org % cd /www/perl.apache.org/dist/ - % chmod 0664 mod_perl-2.0.4.tar.gz.asc - % ln -sf mod_perl-2.0.4.tar.gz.asc mod_perl-2.0-current.tar.gz.asc + % chmod 0664 mod_perl-2.0.5.tar.gz.asc + % ln -sf mod_perl-2.0.5.tar.gz.asc mod_perl-2.0-current.tar.gz.asc c. ask one of the other developers to double check the signature file and tarball: download both files and verify the signature: - http://perl.apache.org/dist/mod_perl-2.0.4.tar.gz.asc - http://perl.apache.org/dist/mod_perl-2.0.4.tar.gz + http://perl.apache.org/dist/mod_perl-2.0.5.tar.gz.asc + http://perl.apache.org/dist/mod_perl-2.0.5.tar.gz - % gpg --verify mod_perl-2.0.4.tar.gz.asc + % gpg --verify mod_perl-2.0.5.tar.gz.asc - % pgpv mod_perl-2.0.4.tar.gz.asc + % pgpv mod_perl-2.0.5.tar.gz.asc d. make sure that the files you just created are group rw so all the dist admins can make changes: - % find /www/perl.apache.org/dist/ -user $USER -type f -exec chmod 0664 {} \; - % find /www/perl.apache.org/dist/ -user $USER -type d -exec chmod 0775 {} \; + % find /www/perl.apache.org/dist/ -user $USER -type f -print0 | xargs -0 chmod 0664 + % find /www/perl.apache.org/dist/ -user $USER -type d -print0 | xargs -0 chmod 0775 7. Distribute to www.apache.org/dist/perl and archive the old package under /www/archive.apache.org/dist/perl/ @@ -172,27 +181,27 @@ a. unpack the package, update symlinks to the tarball and unpacked distro: % cd /www/www.apache.org/dist/perl/ - % cp /www/perl.apache.org/dist/mod_perl-2.0.4.tar.gz* . - % tar -xzvf mod_perl-2.0.4.tar.gz - % mv mod_perl-2.0.2.tar.gz* /www/archive.apache.org/dist/perl/ - % rm -rf mod_perl-2.0.2 + % cp /www/perl.apache.org/dist/mod_perl-2.0.5.tar.gz* . + % tar -xzvf mod_perl-2.0.5.tar.gz + % mv mod_perl-2.0.3.tar.gz* /www/archive.apache.org/dist/perl/ + % rm -rf mod_perl-2.0.3 b. make sure that the files you just created are group rw so all the dist admins can make changes: - % find /www/www.apache.org/dist/ -user $USER -type f -exec chmod 0664 {} \; - % find /www/www.apache.org/dist/ -user $USER -type d -exec chmod 0775 {} \; + % find /www/www.apache.org/dist/perl/ -user $USER -type f -print0 | xargs -0 chmod 0664 + % find /www/www.apache.org/dist/perl/ -user $USER -type d -print0 | xargs -0 chmod 0775 8. Announce the package a. post ... to the modperl, announce lists Note, to post to announce@, you must be sending from an apache.org address. - Subject: [ANNOUNCE] mod_perl 2.0.4 + Subject: [ANNOUNCE] mod_perl 2.0.5 include - link at perl.apache.org: - http://apache.org/dist/perl/mod_perl-2.0.4.tar.gz - http://apache.org/dist/perl/mod_perl-2.0.4.tar.gz.asc (pgp sig) + http://apache.org/dist/perl/mod_perl-2.0.5.tar.gz + http://apache.org/dist/perl/mod_perl-2.0.5.tar.gz.asc (pgp sig) - MD5 sig (as it comes from CPAN upload announce). - the latest Changes @@ -203,21 +212,21 @@ b. edit ./Changes: - start a new item with incremented version + '-dev' - =item 2.0.5-dev + =item 2.0.6-dev c. add a release entry in STATUS d. update this file versions to make it easy to copy-n-paste things on the next release: - $ perl -pi -e 's/(\d+)\.(\d+)\.(\d+)/join(".", $1, $2, $3+1)/eg' RELEASE + $ perl -pi -e 's/(\d+)([._])(\d+)(\2)(\d+)/join($2, $1, $3, $5+1)/eg' RELEASE e. commit the changed files - % svn ci -m "start 2.0.4-dev cycle" Changes lib/mod_perl2.pm \ + % svn ci -m "start 2.0.5-dev cycle" Changes lib/mod_perl2.pm \ STATUS RELEASE 10. Old Versions Remind other Developers to delete versions older then the prior release - from CPAN. Old releases can always be found on BackPan. + from CPAN. Old releases can always be found on BACKPAN. Modified: perl/modperl/branches/threading/STATUS URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/STATUS?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/STATUS (original) +++ perl/modperl/branches/threading/STATUS Sun Jun 29 10:21:27 2008 @@ -3,6 +3,7 @@ Release: -------- + 2.000.04 : Released Apr 16, 2008 2.000.03 : Released Nov 29, 2006 2.000.02 : Released Oct 20, 2005 2.000.01 : Released Jun 17, 2005 Modified: perl/modperl/branches/threading/SVN-MOVE URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/SVN-MOVE?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/SVN-MOVE (original) +++ perl/modperl/branches/threading/SVN-MOVE Sun Jun 29 10:21:27 2008 @@ -8,14 +8,6 @@ Reviewed by: ... -* svn:externals Apache-Test/ and docs/ doesn't work breakages: - - - svn diff doesn't work - - svn tagging or branching doesn't work - -* the details of svn propedit svn:ignore and other propedit features - don't appear commit messages - * commit messages should trim the unrelated crap in the file path e.g. currently we get: @@ -36,7 +28,3 @@ Proposed Subject format: $svn_id $first_subdir/$first_file ($trunk) - -* cvs2svn [cvs]embperl: - Move to [svn]/perl/embperl/trunk (with tags/branches there too) - Modified: perl/modperl/branches/threading/lib/Apache2/compat.pm URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/lib/Apache2/compat.pm?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/lib/Apache2/compat.pm (original) +++ perl/modperl/branches/threading/lib/Apache2/compat.pm Sun Jun 29 10:21:27 2008 @@ -322,6 +322,10 @@ package Apache; +sub request { + return Apache2::compat::request(@_); +} + sub unescape_url_info { my ($class, $string) = @_; Apache2::URI::unescape_url($string); Modified: perl/modperl/branches/threading/lib/ModPerl/BuildMM.pm URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/lib/ModPerl/BuildMM.pm?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/lib/ModPerl/BuildMM.pm (original) +++ perl/modperl/branches/threading/lib/ModPerl/BuildMM.pm Sun Jun 29 10:21:27 2008 @@ -360,7 +360,7 @@ $apr_config ||= $build->get_apr_config(); - if ($path =~ m/(Thread|Global)Mutex/) { + if ($path =~ m/(Thread|Global)(Mutex|RWLock)/) { return unless $apr_config->{HAS_THREADS}; } Modified: perl/modperl/branches/threading/lib/ModPerl/WrapXS.pm URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/lib/ModPerl/WrapXS.pm?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/lib/ModPerl/WrapXS.pm (original) +++ perl/modperl/branches/threading/lib/ModPerl/WrapXS.pm Sun Jun 29 10:21:27 2008 @@ -596,8 +596,9 @@ } } - if ($module eq 'APR::Pool') { + if ($module eq 'APR::Pool' && Apache2::Build::PERL_HAS_ITHREADS) { print $fh " modperl_opt_interp_unselect = APR_RETRIEVE_OPTIONAL_FN(modperl_interp_unselect);\n\n"; + print $fh " modperl_opt_thx_interp_get = APR_RETRIEVE_OPTIONAL_FN(modperl_thx_interp_get);\n\n"; } close $fh; Modified: perl/modperl/branches/threading/lib/mod_perl2.pm URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/lib/mod_perl2.pm?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/lib/mod_perl2.pm (original) +++ perl/modperl/branches/threading/lib/mod_perl2.pm Sun Jun 29 10:21:27 2008 @@ -20,7 +20,7 @@ use strict; BEGIN { - our $VERSION = "2.000004"; + our $VERSION = "2.000005"; our $VERSION_TRIPLET; if ($VERSION =~ /(\d+)\.(\d\d\d)(\d+)/) { Modified: perl/modperl/branches/threading/src/modules/perl/mod_perl.c URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/mod_perl.c?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/mod_perl.c (original) +++ perl/modperl/branches/threading/src/modules/perl/mod_perl.c Sun Jun 29 10:21:27 2008 @@ -392,7 +392,7 @@ } PERL_SET_CONTEXT(perl); - MP_THX_INTERP_SET(perl, base_scfg->mip->parent); + modperl_thx_interp_set(perl, base_scfg->mip->parent); #endif /* USE_ITHREADS */ @@ -468,7 +468,7 @@ /* after other parent perls were started in vhosts, make sure that * the context is set to the base_perl */ PERL_SET_CONTEXT(base_perl); - MP_THX_INTERP_SET(base_perl, base_scfg->mip->parent); + modperl_thx_interp_set(base_perl, base_scfg->mip->parent); #endif } @@ -614,6 +614,8 @@ return OK; } + MP_TRACE_i(MP_FUNC, "mod_perl hook init"); + MP_init_status = 1; /* now starting */ modperl_restart_count_inc(s); @@ -850,6 +852,7 @@ #ifdef USE_ITHREADS APR_REGISTER_OPTIONAL_FN(modperl_interp_unselect); + APR_REGISTER_OPTIONAL_FN(modperl_thx_interp_get); #endif /* for <IfDefine MODPERL2> and Apache2->define("MODPERL2") */ @@ -910,7 +913,7 @@ NULL, NULL, MODPERL_HOOK_REALLY_REALLY_FIRST); ap_hook_child_init(modperl_hook_child_init, - NULL, NULL, APR_HOOK_FIRST); + NULL, NULL, MODPERL_HOOK_REALLY_REALLY_FIRST); modperl_register_handler_hooks(); } Modified: perl/modperl/branches/threading/src/modules/perl/mod_perl.h URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/mod_perl.h?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/mod_perl.h (original) +++ perl/modperl/branches/threading/src/modules/perl/mod_perl.h Sun Jun 29 10:21:27 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 *, @@ -153,7 +148,10 @@ /* we need to hook a few internal things before APR_HOOK_REALLY_FIRST */ #define MODPERL_HOOK_REALLY_REALLY_FIRST (-20) +#ifdef USE_ITHREADS APR_DECLARE_OPTIONAL_FN(apr_status_t,modperl_interp_unselect,(void *)); +APR_DECLARE_OPTIONAL_FN(modperl_interp_t *,modperl_thx_interp_get,(PerlInterpreter *)); +#endif /* * perl context overriding and restoration is required when Modified: perl/modperl/branches/threading/src/modules/perl/modperl_apache_compat.h URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/modperl_apache_compat.h?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/modperl_apache_compat.h (original) +++ perl/modperl/branches/threading/src/modules/perl/modperl_apache_compat.h Sun Jun 29 10:21:27 2008 @@ -22,6 +22,7 @@ #if !APR_HAS_THREADS typedef unsigned long apr_os_thread_t; typedef void * apr_thread_mutex_t; +typedef void * apr_thread_rwlock_t; #endif /* back compat adjustements for older Apache versions Modified: perl/modperl/branches/threading/src/modules/perl/modperl_callback.c URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/modperl_callback.c?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/modperl_callback.c (original) +++ perl/modperl/branches/threading/src/modules/perl/modperl_callback.c Sun Jun 29 10:21:27 2008 @@ -197,7 +197,7 @@ /* Child{Init,Exit}, OpenLogs */ aTHX = scfg->mip->parent->perl; PERL_SET_CONTEXT(aTHX); - MP_THX_INTERP_SET(scfg->mip->parent->perl, scfg->mip->parent); + modperl_thx_interp_set(scfg->mip->parent->perl, scfg->mip->parent); } #endif Modified: perl/modperl/branches/threading/src/modules/perl/modperl_config.c URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/modperl_config.c?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/modperl_config.c (original) +++ perl/modperl/branches/threading/src/modules/perl/modperl_config.c Sun Jun 29 10:21:27 2008 @@ -535,7 +535,7 @@ parms.limited = -1; parms.server = s; parms.override = override; - parms.path = path; + parms.path = apr_pstrdup(p, path); parms.pool = p; #ifdef MP_HTTPD_HAS_OVERRIDE_OPTS if (override_options == MP_HTTPD_OVERRIDE_OPTS_UNSET) { Modified: perl/modperl/branches/threading/src/modules/perl/modperl_config.h URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/modperl_config.h?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/modperl_config.h (original) +++ perl/modperl/branches/threading/src/modules/perl/modperl_config.h Sun Jun 29 10:21:27 2008 @@ -126,16 +126,6 @@ # define MP_dSCFG_dTHX dTHXa(scfg->perl) #endif -/* hopefully this macro will not need to be used often */ -#ifdef USE_ITHREADS -# define MP_dTHX \ - modperl_interp_t *interp = \ - modperl_interp_select(r, r->connection, r->server); \ - dTHXa(interp->perl) -#else -# define MP_dTHX dNOOP -#endif - int modperl_config_apply_PerlModule(server_rec *s, modperl_config_srv_t *scfg, PerlInterpreter *perl, apr_pool_t *p); Modified: perl/modperl/branches/threading/src/modules/perl/modperl_interp.c URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/modperl_interp.c?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/modperl_interp.c (original) +++ perl/modperl/branches/threading/src/modules/perl/modperl_interp.c Sun Jun 29 10:21:27 2008 @@ -298,7 +298,7 @@ interp->ccfg->interp = NULL; MpInterpIN_USE_Off(interp); - MP_THX_INTERP_SET(interp->perl, NULL); + modperl_thx_interp_set(interp->perl, NULL); modperl_tipool_putback_data(mip->tipool, data, interp->num_requests); @@ -378,7 +378,7 @@ /* set context (THX) for this thread */ PERL_SET_CONTEXT(interp->perl); /* let the perl interpreter point back to its interp */ - MP_THX_INTERP_SET(interp->perl, interp); + modperl_thx_interp_set(interp->perl, interp); return interp; } @@ -389,7 +389,7 @@ * is not necessary */ /* PERL_SET_CONTEXT(scfg->mip->parent->perl); */ /* let the perl interpreter point back to its interp */ - MP_THX_INTERP_SET(scfg->mip->parent->perl, scfg->mip->parent); + modperl_thx_interp_set(scfg->mip->parent->perl, scfg->mip->parent); return scfg->mip->parent; } @@ -422,7 +422,7 @@ /* XXX: if no VirtualHosts w/ PerlOptions +Parent we can skip this */ PERL_SET_CONTEXT(scfg->mip->parent->perl); /* let the perl interpreter point back to its interp */ - MP_THX_INTERP_SET(scfg->mip->parent->perl, scfg->mip->parent); + modperl_thx_interp_set(scfg->mip->parent->perl, scfg->mip->parent); return scfg->mip->parent; } @@ -437,7 +437,7 @@ (unsigned long)ccfg->interp, ccfg->interp->refcnt); /* set context (THX) for this thread */ PERL_SET_CONTEXT(ccfg->interp->perl); - /* MP_THX_INTERP_SET is not called here because the interp + /* modperl_thx_interp_set is not called here because the interp * already belongs to the perl interpreter */ return ccfg->interp; @@ -450,7 +450,7 @@ /* set context (THX) for this thread */ PERL_SET_CONTEXT(interp->perl); /* let the perl interpreter point back to its interp */ - MP_THX_INTERP_SET(interp->perl, interp); + modperl_thx_interp_set(interp->perl, interp); /* make sure ccfg is initialized */ modperl_config_con_init(c, ccfg); @@ -585,6 +585,24 @@ } } +#define MP_THX_INTERP_KEY "modperl2::thx_interp_key" +modperl_interp_t *modperl_thx_interp_get(PerlInterpreter *thx) +{ + 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 NULL; + interp = INT2PTR(modperl_interp_t *, SvIV(*svp)); + return interp; +} + +void modperl_thx_interp_set(PerlInterpreter *thx, modperl_interp_t *interp) +{ + dTHXa(thx); + (void)hv_store(PL_modglobal, MP_THX_INTERP_KEY, strlen(MP_THX_INTERP_KEY), newSViv(PTR2IV(interp)), 0); + return; +} + #else void modperl_interp_init(server_rec *s, apr_pool_t *p, Modified: perl/modperl/branches/threading/src/modules/perl/modperl_interp.h URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/modperl_interp.h?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/modperl_interp.h (original) +++ perl/modperl/branches/threading/src/modules/perl/modperl_interp.h Sun Jun 29 10:21:27 2008 @@ -24,42 +24,8 @@ #ifdef USE_ITHREADS -/* - * HvPMROOT will never be used by Perl with PL_modglobal. - * so we have stolen it as a quick way to stash the interp - * pointer. - * - * However in 5.9.3 HvPMROOT was completely removed, so we have moved - * to use another struct member that's hopefully won't be used by - * anybody else. But if we can find a better place to store the - * pointer to the current mod_perl interpreter object it'd be a much - * cleaner solution. of course it must be really fast. - */ -#ifndef HvPMROOT -# if MP_PERL_VERSION_AT_LEAST(5, 9, 5) -#define MP_THX_INTERP_GET(thx) \ - (modperl_interp_t *) ((XPVMG*)SvANY(*Perl_Imodglobal_ptr(thx)))->xmg_u.xmg_magic -# else -#define MP_THX_INTERP_GET(thx) \ - (modperl_interp_t *) ((XPVMG*)SvANY(*Perl_Imodglobal_ptr(thx)))->xmg_magic -# endif -#else -#define MP_THX_INTERP_GET(thx) \ - (modperl_interp_t *)HvPMROOT(*Perl_Imodglobal_ptr(thx)) -#endif - -#ifndef HvPMROOT -# if MP_PERL_VERSION_AT_LEAST(5, 9, 5) -#define MP_THX_INTERP_SET(thx, interp) \ - ((XPVMG*)SvANY(*Perl_Imodglobal_ptr(thx)))->xmg_u.xmg_magic = (MAGIC*)interp -# else -#define MP_THX_INTERP_SET(thx, interp) \ - ((XPVMG*)SvANY(*Perl_Imodglobal_ptr(thx)))->xmg_magic = (MAGIC*)interp -# endif -#else -#define MP_THX_INTERP_SET(thx, interp) \ - HvPMROOT(*Perl_Imodglobal_ptr(thx)) = (PMOP*)interp -#endif +modperl_interp_t *modperl_thx_interp_get(PerlInterpreter *thx); +void modperl_thx_interp_set(PerlInterpreter *thx, modperl_interp_t *interp); const char *modperl_interp_scope_desc(modperl_interp_scope_e scope); Modified: perl/modperl/branches/threading/src/modules/perl/modperl_mgv.c URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/modperl_mgv.c?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/modperl_mgv.c (original) +++ perl/modperl/branches/threading/src/modules/perl/modperl_mgv.c Sun Jun 29 10:21:27 2008 @@ -269,7 +269,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))); @@ -332,7 +332,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/branches/threading/src/modules/perl/modperl_perl_includes.h URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/modperl_perl_includes.h?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/modperl_perl_includes.h (original) +++ perl/modperl/branches/threading/src/modules/perl/modperl_perl_includes.h Sun Jun 29 10:21:27 2008 @@ -53,7 +53,6 @@ # define uid_t perl_uid_t # define gid_t perl_gid_t # ifdef exit -# define perl_exit exit # undef exit # endif #endif @@ -68,11 +67,9 @@ #if defined(WIN32) && defined(USE_LARGE_FILES) # ifdef malloc -# define perl_malloc malloc # undef malloc # endif # ifdef free -# define perl_free free # undef free # endif #endif Modified: perl/modperl/branches/threading/src/modules/perl/modperl_svptr_table.c URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/modperl_svptr_table.c?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/modperl_svptr_table.c (original) +++ perl/modperl/branches/threading/src/modules/perl/modperl_svptr_table.c Sun Jun 29 10:21:27 2008 @@ -56,7 +56,7 @@ Newz(0, tbl, 1, PTR_TBL_t); tbl->tbl_max = source->tbl_max; - tbl->tbl_items = source->tbl_items; + tbl->tbl_items = source->tbl_items; Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t *); dst_ary = tbl->tbl_ary; @@ -169,7 +169,7 @@ PTR_TBL_t *tbl; Newz(0, tbl, 1, PTR_TBL_t); tbl->tbl_max = 511; - tbl->tbl_items = 0; + tbl->tbl_items = 0; Newz(0, tbl->tbl_ary, tbl->tbl_max + 1, PTR_TBL_ENT_t*); return tbl; } Modified: perl/modperl/branches/threading/src/modules/perl/modperl_types.h URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/modperl_types.h?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/modperl_types.h (original) +++ perl/modperl/branches/threading/src/modules/perl/modperl_types.h Sun Jun 29 10:21:27 2008 @@ -196,7 +196,7 @@ const char *name; CV *cv; U8 flags; - U32 attrs; + U16 attrs; modperl_handler_t *next; }; Modified: perl/modperl/branches/threading/src/modules/perl/modperl_util.c URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/modperl_util.c?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/modperl_util.c (original) +++ perl/modperl/branches/threading/src/modules/perl/modperl_util.c Sun Jun 29 10:21:27 2008 @@ -864,7 +864,7 @@ if (!pnotes->pnotes) { pnotes->pool = pool; #ifdef USE_ITHREADS - pnotes->interp = MP_THX_INTERP_GET(aTHX); + pnotes->interp = modperl_thx_interp_get(aTHX); pnotes->interp->refcnt++; MP_TRACE_i(MP_FUNC, "TO: (0x%lx)->refcnt incremented to %ld", pnotes->interp, pnotes->interp->refcnt); @@ -891,6 +891,17 @@ return newRV_inc((SV *)pnotes->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); +} + /* * Local Variables: * c-basic-offset: 4 Modified: perl/modperl/branches/threading/src/modules/perl/modperl_util.h URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/src/modules/perl/modperl_util.h?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/src/modules/perl/modperl_util.h (original) +++ perl/modperl/branches/threading/src/modules/perl/modperl_util.h Sun Jun 29 10:21:27 2008 @@ -102,7 +102,7 @@ SV *avrv); void modperl_package_unload(pTHX_ const char *package); #if defined(MP_TRACE) && defined(USE_ITHREADS) -#define MP_TRACEf_PERLID "perl id 0x%lx" +#define MP_TRACEf_PERLID "/perl id 0x%lx" #define MP_TRACEv_PERLID (unsigned long)my_perl #define MP_TRACEv_PERLID_ MP_TRACEv_PERLID, #define MP_TRACEv__PERLID ,MP_TRACEv_PERLID @@ -139,6 +139,8 @@ SV *modperl_pnotes(pTHX_ modperl_pnotes_t *pnotes, SV *key, SV *val, apr_pool_t *pool ); +U16 *modperl_code_attrs(pTHX_ CV *cv); + #endif /* MODPERL_UTIL_H */ /* Modified: perl/modperl/branches/threading/t/apr/pool_lifetime.t URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/t/apr/pool_lifetime.t?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/t/apr/pool_lifetime.t (original) +++ perl/modperl/branches/threading/t/apr/pool_lifetime.t Sun Jun 29 10:21:27 2008 @@ -5,26 +5,20 @@ use Apache::Test; use Apache::TestUtil; use Apache::TestRequest; -use TestCommon::SameInterp; +Apache::TestRequest::user_agent(keep_alive => 1); plan tests => 2, need 'HTML::HeadParser'; my $module = 'TestAPR::pool_lifetime'; my $location = '/' . Apache::TestRequest::module2path($module); -t_debug "getting the same interp ID for $location"; -my $same_interp = Apache::TestRequest::same_interp_tie($location); - -my $skip = $same_interp ? 0 : 1; - for (1..2) { my $expected = "Pong"; - my $received = same_interp_req_body($same_interp, \&GET, $location); - $skip++ unless defined $received; - same_interp_skip_not_found( - $skip, + my $received = GET $location; + + ok t_cmp( + $received->content, $expected, - $received, - "Pong" + "Pong", ); } Modified: perl/modperl/branches/threading/t/hooks/TestHooks/inlined_handlers.pm URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/t/hooks/TestHooks/inlined_handlers.pm?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/t/hooks/TestHooks/inlined_handlers.pm (original) +++ perl/modperl/branches/threading/t/hooks/TestHooks/inlined_handlers.pm Sun Jun 29 10:21:27 2008 @@ -6,10 +6,6 @@ # previously there was a bug in non-ithreaded-perl implementation # where the cached compiled CODE ref didn't have the reference count # right. -# -# this test needs to run via the same_interpr framework, since it must -# test that the same perl interprter/process gets to run the same -# inlined handler use strict; use warnings FATAL => 'all'; @@ -31,7 +27,6 @@ <NoAutoConfig> <Location /TestHooks__inlined_handlers> SetHandler modperl - PerlInitHandler Apache::TestHandler::same_interp_fixup PerlFixupHandler 'sub { use Apache2::Const qw(DECLINED); DECLINED }' PerlResponseHandler TestHooks::inlined_handlers </Location> Modified: perl/modperl/branches/threading/t/hooks/inlined_handlers.t URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/t/hooks/inlined_handlers.t?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/t/hooks/inlined_handlers.t (original) +++ perl/modperl/branches/threading/t/hooks/inlined_handlers.t Sun Jun 29 10:21:27 2008 @@ -11,19 +11,14 @@ my $location = "/TestHooks__inlined_handlers"; -t_debug "getting the same interp ID for $location"; -my $same_interp = Apache::TestRequest::same_interp_tie($location); - -my $skip = $same_interp ? 0 : 1; my $expected = "ok"; for (1..2) { - my $received = same_interp_req_body($same_interp, \&GET, $location); - $skip++ unless defined $received; - same_interp_skip_not_found( - $skip, - $received, + my $received = GET $location; + + ok t_cmp( + $received->content, $expected, - "anonymous handlers in httpd.conf test" + "anonymous handlers in httpd.conf test", ); } Modified: perl/modperl/branches/threading/t/modperl/cookie.t URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/t/modperl/cookie.t?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/t/modperl/cookie.t (original) +++ perl/modperl/branches/threading/t/modperl/cookie.t Sun Jun 29 10:21:27 2008 @@ -20,8 +20,7 @@ use Apache::Test; use Apache::TestUtil; use Apache::TestRequest; - -use TestCommon::SameInterp; +Apache::TestRequest::user_agent(keep_alive => 1); plan tests => 3, need 'HTML::HeadParser'; @@ -42,21 +41,17 @@ my @tests_ordered = qw(header env nocookie); -t_debug "getting the same interp ID for $location"; -my $same_interp = Apache::TestRequest::same_interp_tie($location); +GET $location; -my $skip = $same_interp ? 0 : 1; for my $test (@tests_ordered) { my $expected = $test eq 'nocookie' ? '' : "bar"; my @headers = (); push @headers, (Cookie => $cookies{$test}) unless $test eq 'nocookie'; - my $received = same_interp_req_body($same_interp, \&GET, - "$location?$test", @headers); - $skip++ unless defined $received; - same_interp_skip_not_found( - $skip, - $received, + my $received = GET "$location?$test", @headers; + + ok t_cmp( + $received->content, $expected, "perl-script+SetupEnv/cookie: $test" ); Modified: perl/modperl/branches/threading/t/modperl/cookie2.t URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/t/modperl/cookie2.t?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/t/modperl/cookie2.t (original) +++ perl/modperl/branches/threading/t/modperl/cookie2.t Sun Jun 29 10:21:27 2008 @@ -15,7 +15,7 @@ use Apache::Test; use Apache::TestUtil; use Apache::TestRequest; -use TestCommon::SameInterp; +Apache::TestRequest::user_agent(keep_alive => 1); plan tests => 3, need 'HTML::HeadParser'; @@ -31,21 +31,14 @@ my @tests_ordered = qw(header subprocess_env env); -t_debug "getting the same interp ID for $location"; -my $same_interp = Apache::TestRequest::same_interp_tie($location); - -my $skip = $same_interp ? 0 : 1; for my $test (@tests_ordered) { my $cookie = "key=$test"; - my $received = same_interp_req_body($same_interp, \&GET, - "$location?$test", - Cookie => $cookie); - $skip++ unless defined $received; - same_interp_skip_not_found( - $skip, - $received, + my $received = GET "$location?$test", Cookie => $cookie; + + ok t_cmp( + $received->content, $expected{$test}, - "perl-script+SetupEnv/cookie: $test" + "perl-script+SetupEnv/cookie: $test", ); } Modified: perl/modperl/branches/threading/t/modperl/request_rec_perlio_api.t URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/t/modperl/request_rec_perlio_api.t?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/t/modperl/request_rec_perlio_api.t (original) +++ perl/modperl/branches/threading/t/modperl/request_rec_perlio_api.t Sun Jun 29 10:21:27 2008 @@ -15,9 +15,13 @@ { + # t/response/TestModperl/request_rec_perlio_api.pm reads the first few + # bytes from the .pm file itself. If these are changed remember to change + # the expected bytes here as well. my $content = join "", 'a'..'j', 'k'..'t'; my $location = "$uri?STDIN"; - my $expected = join "", 'a'..'j', "# please", 'k'..'t'; + my $expected = join("", 'a'..'j', + "# please insert nothing before this line", 'k'..'t'); my $received = POST_BODY_ASSERT $location, content => $content; ok t_cmp($received, $expected, "STDIN tests"); } Modified: perl/modperl/branches/threading/t/modules/apache_status.t URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/t/modules/apache_status.t?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/t/modules/apache_status.t (original) +++ perl/modperl/branches/threading/t/modules/apache_status.t Sun Jun 29 10:21:27 2008 @@ -19,13 +19,9 @@ { my $url = "$base_url"; my $body = GET_BODY_ASSERT $url; - (my $pver = $]) =~ s/00//; - $pver =~ s/(\d\.\d)(.*)/"$1." . ($2 ? int($2) : 0)/e; - #t_debug $body; - t_debug $pver; - # expecting: Embedded Perl version v5.8.2 for ... - ok $body =~ /$pver/; - + # expecting: Embedded Perl version <b>v5.8.2</b> for ... + my $pver = $^V ? sprintf "v%vd", $^V : $]; + ok t_cmp($body, qr[Embedded Perl version <b>$pver</b> for]); # menu_item, part 1 # expecting: Test Entry ok $body =~ /Test Menu Entry/; Modified: perl/modperl/branches/threading/t/perl/ithreads3.t URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/t/perl/ithreads3.t?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/t/perl/ithreads3.t (original) +++ perl/modperl/branches/threading/t/perl/ithreads3.t Sun Jun 29 10:21:27 2008 @@ -6,7 +6,7 @@ use Apache::TestUtil; use Apache::TestRequest 'GET_BODY'; -plan tests => 6, need_apache_mpm('worker') && need_perl('ithreads'); +plan tests => 20, need_apache_mpm('worker') && need_perl('ithreads') && need_lwp; my $module = 'TestPerl::ithreads3'; @@ -25,12 +25,54 @@ return $rc; } +Apache::TestRequest::user_agent(reset => 1, keep_alive=>1); + t_debug("connecting to ".u('')); -ok t_cmp t('/perl-script?1'), 2, 'perl-script 1'; -ok t_cmp t('/modperl?1'), 2, 'modperl 1'; -ok t_cmp t('/perl-script?2'), 5, 'perl-script 2'; -ok t_cmp t('/modperl?2'), 5, 'modperl 2'; +my ($t, $descr); -ok t_cmp t('/perl-script?3'), 3, 'perl-script 3'; -ok t_cmp t('/modperl?3'), 3, 'modperl 3'; +$t=1; +$descr='each phase new interp'; +ok t_cmp t('/perl-script/?'.$t), '1,1,1,1,1', 'perl-script: '.$descr; +ok t_cmp t('/modperl/?'.$t), '1,1,1,1,1', 'modperl: '.$descr; +ok t_cmp t('/refcnt/?'.$t), '0,0,0,0,1', 'refcnt: '.$descr; + +$t=2; +$descr='interp locked by $r->pnotes'; +ok t_cmp t('/perl-script/?'.$t), '1,2,3,4,5', 'perl-script: '.$descr; +ok t_cmp t('/cleanupnote/?0'), 'PerlResponseHandler', 'cleanupnote: '.$descr; +ok t_cmp t('/modperl/?'.$t), '1,2,3,4,5', 'modperl: '.$descr; +ok t_cmp t('/refcnt/?'.$t), '0,1,1,1,2', 'refcnt: '.$descr; + +$t=3; +$descr='interp locked from trans to fixup'; +ok t_cmp t('/perl-script/?'.$t), '1,2,3,4,1', 'perl-script: '.$descr; +ok t_cmp t('/cleanupnote/?0'), 'PerlFixupHandler', 'cleanupnote: '.$descr; +ok t_cmp t('/modperl/?'.$t), '1,2,3,4,1', 'modperl: '.$descr; +ok t_cmp t('/refcnt/?'.$t), '0,1,1,1,1', 'refcnt: '.$descr; + +$t=4; +$descr='interp locked by $r->connection->pnotes'; +ok t_cmp t('/perl-script/?'.$t), '1,2,3,4,5', 'perl-script: '.$descr; +ok t_cmp t('/modperl/?'.$t), '1,2,3,4,5', 'modperl: '.$descr; +ok t_cmp t('/refcnt/?'.$t), '1,1,1,1,2', 'refcnt: '.$descr; + +Apache::TestRequest::user_agent(reset => 1, keep_alive=>1); + +$t=4; +t('/refcnt/?'.$t); +$t=5; +$descr='interp locked by $r->connection->pnotes 2nd call'; +ok t_cmp t('/perl-script/?'.$t), '1,2,3,4,5,6,7,8,9,10,11', 'perl-script: '.$descr; +ok t_cmp t('/modperl/?'.$t), '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16', 'modperl: '.$descr; +ok t_cmp t('/refcnt/?'.$t), '0,1,1,1,2,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,2', 'refcnt: '.$descr; + +Apache::TestRequest::user_agent(reset => 1, keep_alive=>1); + +$t=4; +t('/refcnt/?'.$t); +$t=6; +$descr='interp unlocked after 2nd call'; +ok t_cmp t('/modperl/?'.$t), '1,2,3,4,5,6,7,8,1,1,1', 'modperl: '.$descr; +ok t_cmp t('/refcnt/?'.$t), '0,1,1,1,2,2,1,1,0,0,1,1,0,1,0,0,1', 'refcnt: '.$descr; +ok t_cmp t('/cleanupnote/?0'), 'PerlMapToStorageHandler', 'cleanupnote: '.$descr; Modified: perl/modperl/branches/threading/t/response/TestAPI/add_config.pm URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/t/response/TestAPI/add_config.pm?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/t/response/TestAPI/add_config.pm (original) +++ perl/modperl/branches/threading/t/response/TestAPI/add_config.pm Sun Jun 29 10:21:27 2008 @@ -59,6 +59,14 @@ }; $r->pnotes(followsymlinks => "$@"); + eval { + my $path="/a/path/to/somewhere"; + $r->add_config(['PerlResponseHandler '.__PACKAGE__], -1, $path); + # now overwrite the path in place to see if the location pointer + # is really copied: see modperl_config_dir_create + $path=~tr[a-z][n-za-m]; + }; + return Apache2::Const::DECLINED; } @@ -83,7 +91,7 @@ my ($self, $r) = @_; my $cf = $self->get_config($r->server); - plan $r, tests => 8; + plan $r, tests => 9; ok t_cmp $r->pnotes('add_config1'), qr/.+\n/; ok t_cmp $r->pnotes('add_config2'), (APACHE22 ? qr/.+\n/ : ''); @@ -103,6 +111,8 @@ my $opts = APACHE22 ? Apache2::Const::OPT_SYM_LINKS : $expect; ok t_cmp $r->allow_override_opts, $opts; + ok t_cmp $r->location, '/a/path/to/somewhere'; + return Apache2::Const::OK; } @@ -118,7 +128,6 @@ <Directory @DocumentRoot@> AllowOverride All </Directory> - PerlResponseHandler TestAPI::add_config PerlMapToStorageHandler TestAPI::add_config::map2storage PerlFixupHandler TestAPI::add_config::fixup </VirtualHost> Modified: perl/modperl/branches/threading/t/response/TestAPR/pool_lifetime.pm URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/t/response/TestAPR/pool_lifetime.pm?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/t/response/TestAPR/pool_lifetime.pm (original) +++ perl/modperl/branches/threading/t/response/TestAPR/pool_lifetime.pm Sun Jun 29 10:21:27 2008 @@ -24,5 +24,3 @@ } 1; -__END__ -PerlFixupHandler Apache::TestHandler::same_interp_fixup Modified: perl/modperl/branches/threading/t/response/TestModperl/cookie.pm URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/t/response/TestModperl/cookie.pm?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/t/response/TestModperl/cookie.pm (original) +++ perl/modperl/branches/threading/t/response/TestModperl/cookie.pm Sun Jun 29 10:21:27 2008 @@ -49,7 +49,6 @@ __DATA__ SetHandler perl-script PerlModule TestModperl::cookie -PerlInitHandler Apache::TestHandler::same_interp_fixup PerlAccessHandler TestModperl::cookie::access PerlResponseHandler TestModperl::cookie PerlOptions -SetupEnv Modified: perl/modperl/branches/threading/t/response/TestModperl/cookie2.pm URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/t/response/TestModperl/cookie2.pm?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/t/response/TestModperl/cookie2.pm (original) +++ perl/modperl/branches/threading/t/response/TestModperl/cookie2.pm Sun Jun 29 10:21:27 2008 @@ -45,6 +45,5 @@ __DATA__ SetHandler modperl PerlModule TestModperl::cookie2 -PerlInitHandler Apache::TestHandler::same_interp_fixup PerlAccessHandler TestModperl::cookie2::access PerlResponseHandler TestModperl::cookie2 Modified: perl/modperl/branches/threading/t/response/TestModperl/request_rec_perlio_api.pm URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/t/response/TestModperl/request_rec_perlio_api.pm?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/t/response/TestModperl/request_rec_perlio_api.pm (original) +++ perl/modperl/branches/threading/t/response/TestModperl/request_rec_perlio_api.pm Sun Jun 29 10:21:27 2008 @@ -39,10 +39,13 @@ # lose any chars when we restore it to the POST stream open my $stdin, "<&STDIN" or die "Can't dup STDIN: $!"; + # this module reads the first few bytes from its .pm file. If these + # are changed remember to change the expected bytes in + # t/modperl/request_rec_perlio_api.t as well. open STDIN, "<", __FILE__ or die "failed to open STDIN as 'in memory' file : $!"; my $data; - read STDIN, $data, length("# please"); + read STDIN, $data, length("# please insert nothing before this line"); print STDOUT $data; close STDIN; Modified: perl/modperl/branches/threading/t/response/TestPerl/ithreads3.pm URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/t/response/TestPerl/ithreads3.pm?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/t/response/TestPerl/ithreads3.pm (original) +++ perl/modperl/branches/threading/t/response/TestPerl/ithreads3.pm Sun Jun 29 10:21:27 2008 @@ -4,72 +4,174 @@ use strict; use warnings FATAL => 'all'; -use Apache2::RequestRec; -use Apache2::RequestIO; -use Apache2::RequestUtil; -use APR::Pool; +use Apache2::RequestRec (); +use Apache2::RequestIO (); +use Apache2::RequestUtil (); +use Apache2::Connection (); +use Apache2::ConnectionUtil (); +use APR::Pool (); +use ModPerl::Interpreter (); +use ModPerl::Util (); +use APR::Table (); use Apache2::Const -compile => 'OK', 'DECLINED'; -# XXX: These tests rely on the assumption that the virtual host is not -# otherwise accessed. In this case the same interpreter is chosen -# for each phase. The $counter counts them. -# Of course if only 1 interp is configured it must be hit each time. +{ + package TestPerl::ithreads3::x; + use strict; + use warnings FATAL => 'all'; -my $counter=0; + sub new {shift;bless [@_];} + sub DESTROY {my $f=shift @{$_[0]}; $f->(@{$_[0]});} +} + +sub init { + my $r=shift; + + return Apache2::Const::DECLINED unless( $r->is_initial_req ); + + my $interp=ModPerl::Interpreter::current; + $r->connection->notes->{interp}=join(':', $$interp, $interp->num_requests); + $r->connection->notes->{refcnt}=$interp->refcnt; + + return Apache2::Const::DECLINED; +} + +sub add { + my $r=shift; + + return Apache2::Const::DECLINED unless( $r->is_initial_req ); + + my $interp=ModPerl::Interpreter::current; + $r->connection->notes->{interp}.=','.join(':', $$interp, $interp->num_requests); + $r->connection->notes->{refcnt}.=','.$interp->refcnt; + + return Apache2::Const::DECLINED; +} + +sub unlock1 { + my $r=shift; + + return Apache2::Const::DECLINED unless( $r->is_initial_req ); + + $r->pnotes_kill; + + return Apache2::Const::DECLINED; +} + +sub unlock2 { + my $r=shift; + + return Apache2::Const::DECLINED unless( $r->is_initial_req ); + + $r->connection->pnotes_kill; + + return Apache2::Const::DECLINED; +} sub response { - my $r=shift; - $r->content_type('text/plain'); - $r->print($counter); - return Apache2::Const::OK; + my $r=shift; + + add($r); + + my %interp; + my @rc; + foreach my $i (split /,/, $r->connection->notes->{interp}) { + $interp{$i}++; + push @rc, $interp{$i}; + } + + $r->content_type('text/plain'); + $r->print(join(',', @rc)); + return Apache2::Const::OK; } -sub count { $counter++; return Apache2::Const::DECLINED; } +sub refcnt { + my $r=shift; + + add($r); -sub clear_pool { - delete $_[0]->pnotes->{my_pool}; - return Apache2::Const::DECLINED; + $r->content_type('text/plain'); + $r->print($r->connection->notes->{refcnt}); + return Apache2::Const::OK; +} + +sub cleanupnote { + my $r=shift; + + $r->content_type('text/plain'); + $r->print($r->connection->notes->{cleanup}); + delete $r->connection->notes->{cleanup}; + return Apache2::Const::OK; } sub trans { - my $r=shift; - my $test=$r->args; - $counter=0; - if( $test eq '1' ) { - # this is to check for a bug in modperl_response_handler versus - # modperl_response_handler_cgi. The former used to allocate an - # extra interpreter for its work. In both cases $counter should be - # 2 in the response phase - $r->push_handlers( PerlMapToStorageHandler=>__PACKAGE__.'::count' ); - $r->push_handlers( PerlFixupHandler=>__PACKAGE__.'::count' ); - } - elsif( $test eq '2' ) { - # now add an extra PerlCleanupHandler. It is run each time the - # interp is released. So it is run after Trans, MapToStorage and - # Fixup. In the response phase $counter should be 5. After Response - # it is run again but that is after. - # This used to eat up all interpreters because modperl_interp_unselect - # calls modperl_config_request_cleanup that allocates a new interp - # to handle the cleanup. When this interp is then unselected - # modperl_interp_unselect gets called again but the cleanup handler is - # still installed. So the cycle starts again until all interpreters - # are in use or the stack runs out. Then the thread is locked infinitely - # or a segfault appears. - $r->push_handlers( PerlMapToStorageHandler=>__PACKAGE__.'::count' ); - $r->push_handlers( PerlFixupHandler=>__PACKAGE__.'::count' ); - $r->push_handlers( PerlCleanupHandler=>__PACKAGE__.'::count' ); - } - elsif( $test eq '3' ) { - # a subpool adds an extra reference to the interp. So it is preserved - # and bound to the request until the pool is destroyed. So the cleanup - # handler is run only once after Fixup. Hence the counter is 3. - $r->push_handlers( PerlMapToStorageHandler=>__PACKAGE__.'::count' ); - $r->push_handlers( PerlFixupHandler=>__PACKAGE__.'::count' ); - $r->push_handlers( PerlCleanupHandler=>__PACKAGE__.'::count' ); - $r->pnotes->{my_pool}=$r->pool->new; - $r->push_handlers( PerlFixupHandler=>__PACKAGE__.'::clear_pool' ); - } - return Apache2::Const::DECLINED; + my $r=shift; + + my $test=$r->args; + if( !defined $test or $test eq '0' ) { + } elsif( $test eq '1' ) { + init($r); + + $r->push_handlers( PerlMapToStorageHandler=>__PACKAGE__.'::add' ); + $r->push_handlers( PerlHeaderParserHandler=>__PACKAGE__.'::add' ); + $r->push_handlers( PerlFixupHandler=>__PACKAGE__.'::add' ); + } elsif( $test eq '2' ) { + init($r); + + # XXX: current_callback returns "PerlResponseHandler" here + # because it is the last phase in the request cycle that has + # a perl handler installed. "current_callback" is set only in + # modperl_callback_run_handler() + $r->pnotes->{lock}=TestPerl::ithreads3::x->new + (sub{$_[0]->notes->{cleanup}=ModPerl::Util::current_callback}, + $r->connection); + + $r->push_handlers( PerlMapToStorageHandler=>__PACKAGE__.'::add' ); + $r->push_handlers( PerlHeaderParserHandler=>__PACKAGE__.'::add' ); + $r->push_handlers( PerlFixupHandler=>__PACKAGE__.'::add' ); + } elsif( $test eq '3' ) { + init($r); + + # XXX: current_callback returns "PerlFixupHandler" here + # because pnotes are killed in the fixup handler unlock1() + $r->pnotes->{lock}=TestPerl::ithreads3::x->new + (sub{$_[0]->notes->{cleanup}=ModPerl::Util::current_callback}, + $r->connection); + + $r->push_handlers( PerlMapToStorageHandler=>__PACKAGE__.'::add' ); + $r->push_handlers( PerlHeaderParserHandler=>__PACKAGE__.'::add' ); + $r->push_handlers( PerlFixupHandler=>__PACKAGE__.'::add' ); + $r->push_handlers( PerlFixupHandler=>__PACKAGE__.'::unlock1' ); + } elsif( $test eq '4' ) { + init($r); + + $r->connection->pnotes->{lock}=1; + + $r->push_handlers( PerlMapToStorageHandler=>__PACKAGE__.'::add' ); + $r->push_handlers( PerlHeaderParserHandler=>__PACKAGE__.'::add' ); + $r->push_handlers( PerlFixupHandler=>__PACKAGE__.'::add' ); + $r->push_handlers( PerlCleanupHandler=>__PACKAGE__.'::add' ); + } elsif( $test eq '5' ) { + add($r); + + $r->push_handlers( PerlMapToStorageHandler=>__PACKAGE__.'::add' ); + $r->push_handlers( PerlHeaderParserHandler=>__PACKAGE__.'::add' ); + $r->push_handlers( PerlFixupHandler=>__PACKAGE__.'::add' ); + } elsif( $test eq '6' ) { + add($r); + + $r->push_handlers( PerlMapToStorageHandler=>__PACKAGE__.'::add' ); + $r->push_handlers( PerlMapToStorageHandler=>__PACKAGE__.'::unlock2' ); + + $r->connection->pnotes->{lock}=TestPerl::ithreads3::x->new + (sub{$_[0]->notes->{cleanup}=ModPerl::Util::current_callback}, + $r->connection); + + $r->push_handlers( PerlHeaderParserHandler=>__PACKAGE__.'::add' ); + $r->push_handlers( PerlFixupHandler=>__PACKAGE__.'::add' ); + $r->push_handlers( PerlCleanupHandler=>__PACKAGE__.'::add' ); + } + return Apache2::Const::DECLINED; } 1; @@ -93,6 +195,19 @@ PerlSwitches -I [at] serverroo@ PerlRequire "conf/modperl_inc.pl" PerlModule TestPerl::ithreads3 + KeepAlive On + KeepAliveTimeout 300 + MaxKeepAliveRequests 500 + + <Location /refcnt> + SetHandler modperl + PerlResponseHandler TestPerl::ithreads3::refcnt + </Location> + + <Location /cleanupnote> + SetHandler modperl + PerlResponseHandler TestPerl::ithreads3::cleanupnote + </Location> <Location /modperl> SetHandler modperl Modified: perl/modperl/branches/threading/xs/APR/Pool/APR__Pool.h URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/xs/APR/Pool/APR__Pool.h?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/xs/APR/Pool/APR__Pool.h (original) +++ perl/modperl/branches/threading/xs/APR/Pool/APR__Pool.h Sun Jun 29 10:21:27 2008 @@ -39,9 +39,11 @@ */ #ifndef MP_SOURCE_SCAN +#ifdef USE_ITHREADS #include "apr_optional.h" -static APR_OPTIONAL_FN_TYPE(modperl_interp_unselect) *modperl_opt_interp_unselect; +APR_OPTIONAL_FN_TYPE(modperl_thx_interp_get) *modperl_opt_thx_interp_get; +#endif #endif #define MP_APR_POOL_SV_HAS_OWNERSHIP(sv) mpxs_pool_is_custom(sv) @@ -97,10 +99,12 @@ /* make sure interpreter is not putback into the mip \ * until this cleanup has run. \ */ \ - if ((acct->interp = MP_THX_INTERP_GET(aTHX))) { \ - acct->interp->refcnt++; \ - MP_TRACE_i(MP_FUNC, "TO: (0x%lx)->refcnt incremented to %ld", \ - acct->interp, acct->interp->refcnt); \ + if (modperl_opt_thx_interp_get) { \ + if ((acct->interp = modperl_opt_thx_interp_get(aTHX))) { \ + acct->interp->refcnt++; \ + MP_TRACE_i(MP_FUNC, "TO: (0x%lx)->refcnt incr to %ld", \ + acct->interp, acct->interp->refcnt); \ + } \ } \ } STMT_END @@ -340,10 +344,12 @@ /* make sure interpreter is not putback into the mip * until this cleanup has run. */ - if ((data->interp = MP_THX_INTERP_GET(data->perl))) { - data->interp->refcnt++; - MP_TRACE_i(MP_FUNC, "(0x%lx)->refcnt incremented to %ld", - data->interp, data->interp->refcnt); + if (modperl_opt_thx_interp_get) { + if ((data->interp = modperl_opt_thx_interp_get(data->perl))) { + data->interp->refcnt++; + MP_TRACE_i(MP_FUNC, "(0x%lx)->refcnt incr to %ld", + data->interp, data->interp->refcnt); + } } #endif Modified: perl/modperl/branches/threading/xs/Apache2/Filter/Apache2__Filter.h URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/xs/Apache2/Filter/Apache2__Filter.h?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/xs/Apache2/Filter/Apache2__Filter.h (original) +++ perl/modperl/branches/threading/xs/Apache2/Filter/Apache2__Filter.h Sun Jun 29 10:21:27 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/branches/threading/xs/Apache2/SubRequest/Apache2__SubRequest.h URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/xs/Apache2/SubRequest/Apache2__SubRequest.h?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/xs/Apache2/SubRequest/Apache2__SubRequest.h (original) +++ perl/modperl/branches/threading/xs/Apache2/SubRequest/Apache2__SubRequest.h Sun Jun 29 10:21:27 2008 @@ -23,8 +23,10 @@ if (r->main) { modperl_config_req_t *rcfg = modperl_config_req_get(r->main); - MP_RUN_CROAK(modperl_wbucket_flush(rcfg->wbucket, FALSE), - "Apache2::SubRequest::run"); + if (rcfg->wbucket) { + MP_RUN_CROAK(modperl_wbucket_flush(rcfg->wbucket, FALSE), + "Apache2::SubRequest::run"); + } } return ap_run_sub_req(r); Modified: perl/modperl/branches/threading/xs/ModPerl/Interpreter/ModPerl__Interpreter.h URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/xs/ModPerl/Interpreter/ModPerl__Interpreter.h?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/xs/ModPerl/Interpreter/ModPerl__Interpreter.h (original) +++ perl/modperl/branches/threading/xs/ModPerl/Interpreter/ModPerl__Interpreter.h Sun Jun 29 10:21:27 2008 @@ -17,7 +17,7 @@ static MP_INLINE modperl_interp_t *mpxs_ModPerl__Interpreter_current(pTHX_ SV *class) { - return MP_THX_INTERP_GET(aTHX); + return modperl_thx_interp_get(aTHX); } /* Modified: perl/modperl/branches/threading/xs/tables/current/ModPerl/FunctionTable.pm URL: http://svn.apache.org/viewvc/perl/modperl/branches/threading/xs/tables/current/ModPerl/FunctionTable.pm?rev=672647&r1=672646&r2=672647&view=diff ============================================================================== --- perl/modperl/branches/threading/xs/tables/current/ModPerl/FunctionTable.pm (original) +++ perl/modperl/branches/threading/xs/tables/current/ModPerl/FunctionTable.pm Sun Jun 29 10:21:27 2008 @@ -1240,6 +1240,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' => [ @@ -5041,6 +5055,30 @@ 'args' => [] }, { + 'return_type' => 'modperl_interp_t *', + 'name' => 'modperl_thx_interp_get', + 'args' => [. + { + 'type' => 'PerlInterpreter *', + 'name' => 'thx', + }, + ], + }, + { + 'return_type' => 'void', + 'name' => 'modperl_thx_interp_set', + 'args' => [. + { + 'type' => 'PerlInterpreter *', + 'name' => 'thx', + }, + { + 'type' => 'modperl_interp_t *', + 'name' => 'interp', + }, + ], + }, + { 'return_type' => 'void', 'name' => 'modperl_tipool_add', 'args' => [
|