In perl.git, the branch maint-5.10 has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/97df84f5811e7c90ff7368de89dfd99104a684c7?hp=2517d1858d72bab250cbc0a4130617a6491b5499>

- Log -----------------------------------------------------------------
commit 97df84f5811e7c90ff7368de89dfd99104a684c7
Author: David Mitchell <[email protected]>
Date:   Mon Aug 10 09:35:05 2009 +0100

    bump Module::Build in Maintainers.pl
    
    (cherry picked from commit 249829ce6656c2e763ab13102348a8d080941b6a)

M       Porting/Maintainers.pl

commit 69d9627577327c4e3b0671cae7fed0fb02eb5dc5
Author: David Golden <[email protected]>
Date:   Sun Aug 9 22:13:50 2009 -0400

    Bump Module::Build version to 0.340201
    
    Module::Build automatically sets configure_requires to its
    current $VERSION, which causes problems if $VERSION is a dev
    release not on CPAN.  To stabilize 5.10.1, this patch bumps
    Module::Build 0.34_02 (currently in 5.10.1-RC1) to 0.340201.
    No other code changes are included.  A matching version will
    be released to CPAN.
    
    (cherry picked from commit 1a7f3fa0f2ee133d43509fa6b96901ab4a7781ce)

M       lib/Module/Build.pm
M       lib/Module/Build/Base.pm
M       lib/Module/Build/Changes
M       lib/Module/Build/Compat.pm
M       lib/Module/Build/Config.pm
M       lib/Module/Build/Cookbook.pm
M       lib/Module/Build/Dumper.pm
M       lib/Module/Build/ModuleInfo.pm
M       lib/Module/Build/Notes.pm
M       lib/Module/Build/PPMMaker.pm
M       lib/Module/Build/Platform/Amiga.pm
M       lib/Module/Build/Platform/Default.pm
M       lib/Module/Build/Platform/EBCDIC.pm
M       lib/Module/Build/Platform/MPEiX.pm
M       lib/Module/Build/Platform/MacOS.pm
M       lib/Module/Build/Platform/RiscOS.pm
M       lib/Module/Build/Platform/Unix.pm
M       lib/Module/Build/Platform/VMS.pm
M       lib/Module/Build/Platform/VOS.pm
M       lib/Module/Build/Platform/Windows.pm
M       lib/Module/Build/Platform/aix.pm
M       lib/Module/Build/Platform/cygwin.pm
M       lib/Module/Build/Platform/darwin.pm
M       lib/Module/Build/Platform/os2.pm
M       lib/Module/Build/PodParser.pm

commit 477932373b1a6a56b1e9d9e6b3d88769961d1a71
Author: Rainer Tammer <[email protected]>
Date:   Fri Aug 7 14:29:07 2009 +0200

    5.10.1-RC1 is released
    
    Hello,
    I have attached a small fix for README.aix (5.10.1 / blead).
    Please could you commit this?
    
    Fixes in this patch:
    
    * correct some typos
    * adjust some dates
    
    Bye
      Rainer
    
    Dave Mitchell wrote:
    > I've just uploaded 5.10.1-RC1 to CPAN.
    >
    > Once it's hit the mirrors it should be(*) available as
    >
    >     http://www.cpan.org//authors/id/D/DA/DAPM/perl-5.10.1-RC1.tar.bz2
    >
    > but until then, its available as
    >
    >     http://www.iabyn.com/tmp/perl-5.10.1-RC1.tar.bz2
    >
    > but please don't advertise that outside of this list.
    >
    > The .gz variant is also available.
    >
    > Rafael, once its hit the mirrors, can you announce it on use.perl.org?
    >
    > So please everyone, test away!
    >
    > I'm not planning to change anything between now and final release unless
    > it's a real showstopper:  I'm past caring about the occasional test
    > failure on some random platform.
    >
    > Also note that I'm away this weekend.
    >
    >
    > (*) This is my first ever use of PAUSE
    >
    >
    
    From 4d658a15475a7866f56ff938d851e6df719c056e Mon Sep 17 00:00:00 2001
    From: Rainer Tammer <[email protected]>
    Date: Fri, 7 Aug 2009 14:25:29 +0200
    Subject: [PATCH] Small fix for READEM.aix
    
    Signed-off-by: H.Merijn Brand <[email protected]>
    
    (cherry picked from commit e37e7c833e8c45586a14c0e4909143bd89f25826)

M       README.aix

commit 121b9059561e3694541e5c2f55ff38c110a3d428
Author: Rafael Garcia-Suarez <[email protected]>
Date:   Fri Aug 7 13:25:21 2009 +0200

    perltodo: Propagate compilation hints to the debugger
    
    Suggested by Ben Morrow
    
    (cherry picked from commit 53967bb90ff3867cdf0a6117faed24c717c12c22)

M       pod/perltodo.pod

commit 87650ddec1f387a9085353bfab3c564f817e3320
Author: Sam Vilain <[email protected]>
Date:   Fri Jul 31 15:32:14 2009 +1200

    pod/perlipc.pod: add some hints on avoiding pipe deadlocks
    
    Tracking down deadlocks when using pipes for IPC can be hard, so put
    even more notes about gotchas in this section of perlipc.
    
    (cherry picked from commit c40e8e9bf43b15cbc5725b65e3085fba60a67489)

M       pod/perlipc.pod

commit 8813a02abcb79b7a2b69c4397f55d9783fb6ed55
Author: Jesse Vincent <[email protected]>
Date:   Thu Aug 6 14:16:58 2009 +0100

    broke out checkAUTHORS aliasing for our two "merijnb" porters
    
    Hopefully I got it right
    
    (cherry picked from commit 9c1f068a70493ee76b1e0fe3f95a09ae0306c700)

M       Porting/checkAUTHORS.pl

commit 753c36a4923f465e4a26f268d0b0b43ab5d8bb6d
Author: Jesse Vincent <[email protected]>
Date:   Thu Aug 6 14:13:42 2009 +0100

    Minor typo and formatting fixes to the release manager guide
    
    (cherry picked from commit bf8ea2150222ec4f257861b93bc878bdcf3c882a)

M       Porting/release_managers_guide.pod

commit f744f28c52dc414a9896be69da616c1656928ae1
Author: David Mitchell <[email protected]>
Date:   Thu Aug 6 03:06:48 2009 +0100

    more release_managers_guide.pod tweaking
    
    (cherry picked from commit a42352eec1716ae3aeb00d35bc5648ac7ffe5558)

M       Porting/release_managers_guide.pod

commit 178d8b556441a926f9f0566fe8010ed700fa2897
Author: David Mitchell <[email protected]>
Date:   Thu Aug 6 01:52:44 2009 +0100

    Porting/makerel: handle more sha1 variants,
    and be quieter on failure
    
    (cherry picked from commit ecc9c9d9c3a4c0426f481023c08d9331c8c5775f)

M       Porting/makerel
-----------------------------------------------------------------------

Summary of changes:
 Porting/Maintainers.pl               |    2 +-
 Porting/checkAUTHORS.pl              |    5 +-
 Porting/makerel                      |   14 +++--
 Porting/release_managers_guide.pod   |   48 ++++++++++++-------
 README.aix                           |   18 ++++----
 lib/Module/Build.pm                  |    2 +-
 lib/Module/Build/Base.pm             |    2 +-
 lib/Module/Build/Changes             |    5 ++
 lib/Module/Build/Compat.pm           |    2 +-
 lib/Module/Build/Config.pm           |    2 +-
 lib/Module/Build/Cookbook.pm         |    2 +-
 lib/Module/Build/Dumper.pm           |    2 +-
 lib/Module/Build/ModuleInfo.pm       |    2 +-
 lib/Module/Build/Notes.pm            |    2 +-
 lib/Module/Build/PPMMaker.pm         |    2 +-
 lib/Module/Build/Platform/Amiga.pm   |    2 +-
 lib/Module/Build/Platform/Default.pm |    2 +-
 lib/Module/Build/Platform/EBCDIC.pm  |    2 +-
 lib/Module/Build/Platform/MPEiX.pm   |    2 +-
 lib/Module/Build/Platform/MacOS.pm   |    2 +-
 lib/Module/Build/Platform/RiscOS.pm  |    2 +-
 lib/Module/Build/Platform/Unix.pm    |    2 +-
 lib/Module/Build/Platform/VMS.pm     |    2 +-
 lib/Module/Build/Platform/VOS.pm     |    2 +-
 lib/Module/Build/Platform/Windows.pm |    2 +-
 lib/Module/Build/Platform/aix.pm     |    2 +-
 lib/Module/Build/Platform/cygwin.pm  |    2 +-
 lib/Module/Build/Platform/darwin.pm  |    2 +-
 lib/Module/Build/Platform/os2.pm     |    2 +-
 lib/Module/Build/PodParser.pm        |    2 +-
 pod/perlipc.pod                      |   86 ++++++++++++++++++++++++++++++++++
 pod/perltodo.pod                     |    9 ++++
 32 files changed, 175 insertions(+), 60 deletions(-)

diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl
index 9b7e288..fd3dabd 100755
--- a/Porting/Maintainers.pl
+++ b/Porting/Maintainers.pl
@@ -1186,7 +1186,7 @@ package Maintainers;
     'Module::Build' =>
        {
        'MAINTAINER'    => 'kwilliams',
-       'DISTRIBUTION'  => 'DAGOLDEN/Module-Build-0.34_02.tar.gz',
+       'DISTRIBUTION'  => 'DAGOLDEN/Module-Build-0.340201.tar.gz',
        'FILES'         => q[lib/Module/Build lib/Module/Build.pm],
        'EXCLUDED'      => [ qw{ t/par.t t/signature.t scripts/bundle.pl}, ],
        'CPAN'          => 1,
diff --git a/Porting/checkAUTHORS.pl b/Porting/checkAUTHORS.pl
index 895dad3..e73b65c 100644
--- a/Porting/checkAUTHORS.pl
+++ b/Porting/checkAUTHORS.pl
@@ -320,9 +320,6 @@ merijn                                  
h.m.brand\100xs4all.nl
 +                                       h.m.brand\100hccnet.nl
 +                                       merijn\100l1.procura.nl
 +                                                                              
merijn\100a5.(none)
-+                                                                              
merijnb\100ms.com
-+                                                                              
merijnb\100iloquent.nl
-+                                                                              
merijnb\100iloquent.com
 mhx                                     mhx-perl\100gmx.net
 +                                                                              
mhx\100r2d2.(none)
 nicholas                                nick\100unfortu.net
@@ -549,6 +546,8 @@ mats\100sm6sxl.net                      mats\100sm5sxl.net
 mbarbon\100dsi.unive.it                 mattia.barbon\100libero.it
 mcmahon\100ibiblio.org                  mcmahon\100metalab.unc.edu
 me\100davidglasser.net                                 
glasser\100tang-eleven-seventy-nine.mit.edu
+merijnb\100iloquent.nl                                 merijnb\100ms.com
++                                                                              
merijnb\100iloquent.com
 merlyn\100stonehenge.com                               
merlyn\100gadget.cscaper.com
 mgjv\100comdyn.com.au                   mgjv\100tradingpost.com.au
 mlh\100swl.msd.ray.com                                         
webtools\100uewrhp03.msd.ray.com
diff --git a/Porting/makerel b/Porting/makerel
index b23e1c7..2159579 100644
--- a/Porting/makerel
+++ b/Porting/makerel
@@ -208,10 +208,12 @@ if ($opts{b}) {
 
 print "\n";
 
-if (`which sha1`) {
-    system("sha1 $perl*.tar.*");
-} elsif (`which shasum`) {
-    system("shasum $perl*.tar.*");
-} else {
-    system("ls -ld $perl*");
+system("ls -ld $perl*");
+print "\n";
+
+for my $sha (qw(sha1 shasum sha1sum)) {
+    if (`which $sha 2>/dev/null`) {
+       system("$sha $perl*.tar.*");
+       last;
+    }
 }
diff --git a/Porting/release_managers_guide.pod 
b/Porting/release_managers_guide.pod
index 4d3a592..ea66609 100644
--- a/Porting/release_managers_guide.pod
+++ b/Porting/release_managers_guide.pod
@@ -364,13 +364,13 @@ remove any C<TODO> or C<XXX> flags; update the "Known 
Problems" section
 with any serious issues for which fixes are not going to happen now; and
 run through pod and spell checkers, e.g.
 
-    podchecker -warnings -warnings pod/perl5101delta.pod
-    spell pod/perl5101delta.pod
+    $ podchecker -warnings -warnings pod/perl5101delta.pod
+    $ spell pod/perl5101delta.pod
 
 Also, you may want to generate and view an HTML version of it to check
 formatting, e.g.
 
-    perl pod/pod2html pod/perl5101delta.pod > /tmp/perl5101delta.html
+    $ perl pod/pod2html pod/perl5101delta.pod > /tmp/perl5101delta.html
 
 =item *
 
@@ -439,7 +439,7 @@ Then change to your perl checkout, and if necessary,
 
     $ make perl
 
-Thenn, If you have a local CPAN mirror, run:
+Then, If you have a local CPAN mirror, run:
 
     $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror
 
@@ -523,8 +523,8 @@ Be sure to commit your changes:
 
 I<You MUST SKIP this step for SNAPSHOT>
 
-Update patchlevel.h to add a C<-RC1>-or-whatever string; or, if this is a
-final release, remove it. For example:
+Update F<patchlevel.h> to add a C<-RC1>-or-whatever string; or, if this is
+a final release, remove it. For example:
 
      static const char * const local_patches[] = {
              NULL
@@ -540,7 +540,11 @@ Be sure to commit your change:
 Build perl, then make sure it passes its own test suite, and installs:
 
     $ git clean -xdf
+    $ ./Configure -des -Dprefix=/tmp/perl-5.x.y-pretest
+
+    # or if it's an odd-numbered version:
     $ ./Configure -des -Dusedevel -Dprefix=/tmp/perl-5.x.y-pretest
+
     $ make test install
 
 =item *
@@ -579,6 +583,12 @@ here
 
 =item *
 
+Clean up the temporary directory, e.g.
+
+    $ rm -rf ../perl-x.y.z-RC1
+
+=item *
+
 Copy the tarballs (.gz and possibly .bz2) to a web server somewhere you
 have access to.
 
@@ -599,7 +609,9 @@ Check that basic configuration and tests work on each test 
machine:
 
 Check that the test harness and install work on each test machine:
 
+    $ make distclean
     $ ./Configure -des -Dprefix=/install/path && make all test_harness install
+    $ cd /install/path
 
 =item *
 
@@ -618,13 +630,17 @@ Bootstrap the CPAN client on the clean install:
 
 =item *
 
-Install Inline.pm 
+Try installing a popular CPAN module that's reasonably complex and that
+has dependencies; for example:
 
-    $ ./bin/perl -MCPAN -e'install Inline'
+    CPAN> install Inline
+    CPAN> quit
 
 Check that your perl can run this:
 
-    $ ./bin/perl -lwe 'use Inline C => "int answer() { return 42;} "; print 
answer'
+    $ ./bin/perl -lwe 'use Inline C => "int f() { return 42;} "; print f'
+    42
+    $
 
 =item *
 
@@ -632,15 +648,13 @@ Bootstrap the CPANPLUS client on the clean install:
 
     $ ./bin/cpanp
 
-
 =item *
 
-Install an XS module.
-
-=item *
+Install an XS module, for example:
 
-If all is well, announce the snapshot to p5p. (For a release candidate,
-instead follow the further steps described later.)
+    CPAN Terminal> i DBI
+    CPAN Terminal> quit
+    $ bin/perl -MDBI -e 1
 
 
 =item *
@@ -662,7 +676,7 @@ Once smoking is okay, upload it to PAUSE. This is the point 
of no return.
 If anything goes wrong after this point, you will need to re-prepare
 a new release with a new minor version or RC number.
 
-You may wish to create a .bz2 version of the tarball and upload that too.
+Upload both the .gz and .bz2 versions of the tarball.
 
 =item *
 
@@ -680,7 +694,7 @@ created.
 
 I<You MUST SKIP this step for SNAPSHOT>
 
-Disarm the patchlevel.h change; for example,
+Disarm the F<patchlevel.h> change; for example,
 
      static const char * const local_patches[] = {
              NULL
diff --git a/README.aix b/README.aix
index 68c8503..12ca6ae 100644
--- a/README.aix
+++ b/README.aix
@@ -32,7 +32,7 @@ like DBD::Oracle, it is better to use the _r version of the 
compiler.
 This will not build a threaded Perl, but a thread-enabled Perl. See
 also L<Threaded Perl> later on.
 
-As of writing (2009-07) only the IBM XL C for AIX or XL C/C++ for AIX
+As of writing (2009-08) only the IBM XL C for AIX or XL C/C++ for AIX
 compiler is supported by IBM on AIX 5L/6.1.
 
 The following compiler versions are supported by IBM:
@@ -60,7 +60,7 @@ development team.
 
 =head2 Incompatibility with AIX Toolbox lib gdbm
 
-If the AIX Toolbox version of lib gdbm 1.8.x ist installed on the 
+If the AIX Toolbox version of lib gdbm 1.8.x is installed on the 
 system then Perl will not work. This library contains a defect version 
 of the dbm_store() function.
 
@@ -82,11 +82,10 @@ of the dbm_store() function.
 
     w th   = with thread
     w/o th = without thread
-    nyt    = not yet tested
     OK     = tested
 
-Successfully tested means that all make test runs with an result of 100% OK.
-All tests were conducted with -Duseshrplib set.
+Successfully tested means that all "make test" runs finish with an 
+result of 100% OK. All tests were conducted with -Duseshrplib set.
 
 =head2 Building Dynamic Extensions on AIX
 
@@ -136,7 +135,8 @@ can set:
         data = -1               (default is 262144 * 512 byte)
 
 With the default setting the size is limited to 128MB.
-The -1 removes this limit.
+The -1 removes this limit. If the "make test" fails please change 
+your /etc/security/limits as stated above.
 
 =head2 Recommended Options AIX 5.1/5.2/5.3 and 6.1 (threaded/32-bit)
 
@@ -204,8 +204,8 @@ make tests in 64-bit mode.
 The -Dprefix option will install Perl in a directory parallel to the 
 IBM AIX system Perl installation.
 
-If you choose gcc to compile 64-bit Perl then you need to use the 
-following options:
+If you choose gcc to compile 64-bit Perl then you need to add the 
+following option:
 
     -Dcc='gcc -maix64'
 
@@ -469,6 +469,6 @@ Rainer Tammer <[email protected]>
 
 =head1 DATE
 
-Version 0.0.9: 08 Jul 2009
+Version 0.0.10: 07 Aug 2009
 
 =cut
diff --git a/lib/Module/Build.pm b/lib/Module/Build.pm
index 7d3e501..3859fde 100644
--- a/lib/Module/Build.pm
+++ b/lib/Module/Build.pm
@@ -15,7 +15,7 @@ use Module::Build::Base;
 
 use vars qw($VERSION @ISA);
 @ISA = qw(Module::Build::Base);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 
 # Okay, this is the brute-force method of finding out what kind of
diff --git a/lib/Module/Build/Base.pm b/lib/Module/Build/Base.pm
index f902b75..ade64c8 100644
--- a/lib/Module/Build/Base.pm
+++ b/lib/Module/Build/Base.pm
@@ -4,7 +4,7 @@ package Module::Build::Base;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 BEGIN { require 5.00503 }
 
diff --git a/lib/Module/Build/Changes b/lib/Module/Build/Changes
index 930bfd1..9ef9eae 100644
--- a/lib/Module/Build/Changes
+++ b/lib/Module/Build/Changes
@@ -1,5 +1,10 @@
 Revision history for Perl extension Module::Build.
 
+0.340201 - Sun Aug  9 22:11:04 EDT 2009
+
+ Other:
+ - Version bump for Perl core for 5.10.1 release; no other changes
+
 0.34_02 - Sun Jul 26 22:50:40 EDT 2009
 
  Bug-fixes:
diff --git a/lib/Module/Build/Compat.pm b/lib/Module/Build/Compat.pm
index f6f8f5d..58bed05 100644
--- a/lib/Module/Build/Compat.pm
+++ b/lib/Module/Build/Compat.pm
@@ -2,7 +2,7 @@ package Module::Build::Compat;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 
 use File::Basename ();
 use File::Spec;
diff --git a/lib/Module/Build/Config.pm b/lib/Module/Build/Config.pm
index 8e0207b..c153f02 100644
--- a/lib/Module/Build/Config.pm
+++ b/lib/Module/Build/Config.pm
@@ -2,7 +2,7 @@ package Module::Build::Config;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use Config;
 
diff --git a/lib/Module/Build/Cookbook.pm b/lib/Module/Build/Cookbook.pm
index 40b84a8..300e79c 100644
--- a/lib/Module/Build/Cookbook.pm
+++ b/lib/Module/Build/Cookbook.pm
@@ -1,7 +1,7 @@
 package Module::Build::Cookbook;
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 
 
 =head1 NAME
diff --git a/lib/Module/Build/Dumper.pm b/lib/Module/Build/Dumper.pm
index 078ca7c..08ff42f 100644
--- a/lib/Module/Build/Dumper.pm
+++ b/lib/Module/Build/Dumper.pm
@@ -1,7 +1,7 @@
 package Module::Build::Dumper;
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 
 # This is just a split-out of a wrapper function to do Data::Dumper
 # stuff "the right way".  See:
diff --git a/lib/Module/Build/ModuleInfo.pm b/lib/Module/Build/ModuleInfo.pm
index fc36c01..8df58b3 100644
--- a/lib/Module/Build/ModuleInfo.pm
+++ b/lib/Module/Build/ModuleInfo.pm
@@ -8,7 +8,7 @@ package Module::Build::ModuleInfo;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 
 use File::Spec;
diff --git a/lib/Module/Build/Notes.pm b/lib/Module/Build/Notes.pm
index e020e12..72bde6c 100644
--- a/lib/Module/Build/Notes.pm
+++ b/lib/Module/Build/Notes.pm
@@ -4,7 +4,7 @@ package Module::Build::Notes;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use Data::Dumper;
 use IO::File;
diff --git a/lib/Module/Build/PPMMaker.pm b/lib/Module/Build/PPMMaker.pm
index aa4b32a..588c799 100644
--- a/lib/Module/Build/PPMMaker.pm
+++ b/lib/Module/Build/PPMMaker.pm
@@ -2,7 +2,7 @@ package Module::Build::PPMMaker;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 
 # This code is mostly borrowed from ExtUtils::MM_Unix 6.10_03, with a
diff --git a/lib/Module/Build/Platform/Amiga.pm 
b/lib/Module/Build/Platform/Amiga.pm
index dd92320..34002db 100644
--- a/lib/Module/Build/Platform/Amiga.pm
+++ b/lib/Module/Build/Platform/Amiga.pm
@@ -2,7 +2,7 @@ package Module::Build::Platform::Amiga;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 
diff --git a/lib/Module/Build/Platform/Default.pm 
b/lib/Module/Build/Platform/Default.pm
index 3b4cbc3..04cbcd7 100644
--- a/lib/Module/Build/Platform/Default.pm
+++ b/lib/Module/Build/Platform/Default.pm
@@ -2,7 +2,7 @@ package Module::Build::Platform::Default;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 
diff --git a/lib/Module/Build/Platform/EBCDIC.pm 
b/lib/Module/Build/Platform/EBCDIC.pm
index 1b7f57e..be8bae7 100644
--- a/lib/Module/Build/Platform/EBCDIC.pm
+++ b/lib/Module/Build/Platform/EBCDIC.pm
@@ -2,7 +2,7 @@ package Module::Build::Platform::EBCDIC;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 
diff --git a/lib/Module/Build/Platform/MPEiX.pm 
b/lib/Module/Build/Platform/MPEiX.pm
index 895c08d..90adff5 100644
--- a/lib/Module/Build/Platform/MPEiX.pm
+++ b/lib/Module/Build/Platform/MPEiX.pm
@@ -2,7 +2,7 @@ package Module::Build::Platform::MPEiX;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 
diff --git a/lib/Module/Build/Platform/MacOS.pm 
b/lib/Module/Build/Platform/MacOS.pm
index 6d3489f..a355675 100644
--- a/lib/Module/Build/Platform/MacOS.pm
+++ b/lib/Module/Build/Platform/MacOS.pm
@@ -2,7 +2,7 @@ package Module::Build::Platform::MacOS;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 use vars qw(@ISA);
diff --git a/lib/Module/Build/Platform/RiscOS.pm 
b/lib/Module/Build/Platform/RiscOS.pm
index e1e3c35..c039eca 100644
--- a/lib/Module/Build/Platform/RiscOS.pm
+++ b/lib/Module/Build/Platform/RiscOS.pm
@@ -2,7 +2,7 @@ package Module::Build::Platform::RiscOS;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 
diff --git a/lib/Module/Build/Platform/Unix.pm 
b/lib/Module/Build/Platform/Unix.pm
index 3b394c9..579b625 100644
--- a/lib/Module/Build/Platform/Unix.pm
+++ b/lib/Module/Build/Platform/Unix.pm
@@ -2,7 +2,7 @@ package Module::Build::Platform::Unix;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 
diff --git a/lib/Module/Build/Platform/VMS.pm b/lib/Module/Build/Platform/VMS.pm
index d597148..102bc5f 100644
--- a/lib/Module/Build/Platform/VMS.pm
+++ b/lib/Module/Build/Platform/VMS.pm
@@ -2,7 +2,7 @@ package Module::Build::Platform::VMS;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 
diff --git a/lib/Module/Build/Platform/VOS.pm b/lib/Module/Build/Platform/VOS.pm
index eaa4d66..b35e795 100644
--- a/lib/Module/Build/Platform/VOS.pm
+++ b/lib/Module/Build/Platform/VOS.pm
@@ -2,7 +2,7 @@ package Module::Build::Platform::VOS;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use Module::Build::Base;
 
diff --git a/lib/Module/Build/Platform/Windows.pm 
b/lib/Module/Build/Platform/Windows.pm
index 2184152..d70563f 100644
--- a/lib/Module/Build/Platform/Windows.pm
+++ b/lib/Module/Build/Platform/Windows.pm
@@ -2,7 +2,7 @@ package Module::Build::Platform::Windows;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 
 use Config;
diff --git a/lib/Module/Build/Platform/aix.pm b/lib/Module/Build/Platform/aix.pm
index 388dc44..0caa376 100644
--- a/lib/Module/Build/Platform/aix.pm
+++ b/lib/Module/Build/Platform/aix.pm
@@ -2,7 +2,7 @@ package Module::Build::Platform::aix;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use Module::Build::Platform::Unix;
 
diff --git a/lib/Module/Build/Platform/cygwin.pm 
b/lib/Module/Build/Platform/cygwin.pm
index 1ce0a98..f73ce95 100644
--- a/lib/Module/Build/Platform/cygwin.pm
+++ b/lib/Module/Build/Platform/cygwin.pm
@@ -2,7 +2,7 @@ package Module::Build::Platform::cygwin;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use Module::Build::Platform::Unix;
 
diff --git a/lib/Module/Build/Platform/darwin.pm 
b/lib/Module/Build/Platform/darwin.pm
index 1a0295a..6ba7cb9 100644
--- a/lib/Module/Build/Platform/darwin.pm
+++ b/lib/Module/Build/Platform/darwin.pm
@@ -2,7 +2,7 @@ package Module::Build::Platform::darwin;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use Module::Build::Platform::Unix;
 
diff --git a/lib/Module/Build/Platform/os2.pm b/lib/Module/Build/Platform/os2.pm
index a65027c..a0c5fd5 100644
--- a/lib/Module/Build/Platform/os2.pm
+++ b/lib/Module/Build/Platform/os2.pm
@@ -2,7 +2,7 @@ package Module::Build::Platform::os2;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use Module::Build::Platform::Unix;
 
diff --git a/lib/Module/Build/PodParser.pm b/lib/Module/Build/PodParser.pm
index e59ce01..d4e1822 100644
--- a/lib/Module/Build/PodParser.pm
+++ b/lib/Module/Build/PodParser.pm
@@ -2,7 +2,7 @@ package Module::Build::PodParser;
 
 use strict;
 use vars qw($VERSION);
-$VERSION = '0.34_02';
+$VERSION = '0.340201';
 $VERSION = eval $VERSION;
 use vars qw(@ISA);
 
diff --git a/pod/perlipc.pod b/pod/perlipc.pod
index 416ded5..77f0b6e 100644
--- a/pod/perlipc.pod
+++ b/pod/perlipc.pod
@@ -630,6 +630,68 @@ And here's a safe pipe open for writing:
        # NOTREACHED
     }
 
+It is very easy to dead-lock a process using this form of open(), or
+indeed any use of pipe() and multiple sub-processes.  The above
+example is 'safe' because it is simple and calls exec().  See
+L</"Avoiding Pipe Deadlocks"> for general safety principles, but there
+are extra gotchas with Safe Pipe Opens.
+
+In particular, if you opened the pipe using C<open FH, "|-">, then you
+cannot simply use close() in the parent process to close an unwanted
+writer.  Consider this code:
+
+    $pid = open WRITER, "|-";
+    defined $pid or die "fork failed; $!";
+    if ($pid) {
+        if (my $sub_pid = fork()) {
+            close WRITER;
+            # do something else...
+        }
+        else {
+            # write to WRITER...
+           exit;
+        }
+    }
+    else {
+        # do something with STDIN...
+       exit;
+    }
+
+In the above, the true parent does not want to write to the WRITER
+filehandle, so it closes it.  However, because WRITER was opened using
+C<open FH, "|-">, it has a special behaviour: closing it will call
+waitpid() (see L<perlfunc/waitpid>), which waits for the sub-process
+to exit.  If the child process ends up waiting for something happening
+in the section marked "do something else", then you have a deadlock.
+
+This can also be a problem with intermediate sub-processes in more
+complicated code, which will call waitpid() on all open filehandles
+during global destruction; in no predictable order.
+
+To solve this, you must manually use pipe(), fork(), and the form of
+open() which sets one file descriptor to another, as below:
+
+    pipe(READER, WRITER);
+    $pid = fork();
+    defined $pid or die "fork failed; $!";
+    if ($pid) {
+       close READER;
+        if (my $sub_pid = fork()) {
+            close WRITER;
+        }
+        else {
+            # write to WRITER...
+           exit;
+        }
+        # write to WRITER...
+    }
+    else {
+        open STDIN, "<&READER";
+        close WRITER;
+        # do something...
+        exit;
+    }
+
 Since Perl 5.8.0, you can also use the list form of C<open> for pipes :
 the syntax
 
@@ -645,6 +707,30 @@ correctly implemented on alien systems.  Additionally, 
these are not true
 multithreading.  If you'd like to learn more about threading, see the
 F<modules> file mentioned below in the SEE ALSO section.
 
+=head2 Avoiding Pipe Deadlocks
+
+In general, if you have more than one sub-process, you need to be very
+careful that any process which does not need the writer half of any
+pipe you create for inter-process communication does not have it open.
+
+The reason for this is that any child process which is reading from
+the pipe and expecting an EOF will never receive it, and therefore
+never exit.  A single process closing a pipe is not enough to close it;
+the last process with the pipe open must close it for it to read EOF.
+
+There are some features built-in to unix to help prevent this most of
+the time.  For instance, filehandles have a 'close on exec' flag (set
+I<en masse> with Perl using the C<$^F> L<perlvar>), so that any
+filehandles which you didn't explicitly route to the STDIN, STDOUT or
+STDERR of a child I<program> will automatically be closed for you.
+
+So, always explicitly and immediately call close() on the writable end
+of any pipe, unless that process is actually writing to it.  If you
+don't explicitly call close() then be warned Perl will still close()
+all the filehandles during global destruction.  As warned above, if
+those filehandles were opened with Safe Pipe Open, they will also call
+waitpid() and you might again deadlock.
+
 =head2 Bidirectional Communication with Another Process
 
 While this works reasonably well for unidirectional communication, what
diff --git a/pod/perltodo.pod b/pod/perltodo.pod
index 8a5a33a..7e7a352 100644
--- a/pod/perltodo.pod
+++ b/pod/perltodo.pod
@@ -926,6 +926,15 @@ 
L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-03/msg00481.html>
 There is no method on tied filehandles to allow them to be called back by
 formats.
 
+=head2 Propagate compilation hints to the debugger
+
+Currently a debugger started with -dE on the command-line doesn't see the
+features enabled by -E. More generally hints (C<$^H> and C<%^H>) aren't
+propagated to the debugger. Probably it would be a good thing to propagate
+hints from the innermost non-C<DB::> scope: this would make code eval'ed
+in the debugger see the features (and strictures, etc.) currently in
+scope.
+
 =head2 Attach/detach debugger from running program
 
 The old perltodo notes "With C<gdb>, you can attach the debugger to a running

--
Perl5 Master Repository

Reply via email to