This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update HTTP-Tiny to CPAN version 0.049
authorChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Wed, 3 Sep 2014 12:58:03 +0000 (13:58 +0100)
committerChris 'BinGOs' Williams <chris@bingosnet.co.uk>
Wed, 3 Sep 2014 12:58:03 +0000 (13:58 +0100)
  [DELTA]

0.049     2014-09-02 11:20:07-04:00 America/New_York

    [FIXED]

    - 'keep_alive' is now fork-safe and thread-safe

Porting/Maintainers.pl
cpan/HTTP-Tiny/lib/HTTP/Tiny.pm
cpan/HTTP-Tiny/t/Util.pm

index 321eb69..c666bc2 100755 (executable)
@@ -583,7 +583,7 @@ use File::Glob qw(:case);
     },
 
     'HTTP::Tiny' => {
-        'DISTRIBUTION' => 'DAGOLDEN/HTTP-Tiny-0.048.tar.gz',
+        'DISTRIBUTION' => 'DAGOLDEN/HTTP-Tiny-0.049.tar.gz',
         'FILES'        => q[cpan/HTTP-Tiny],
         'EXCLUDED'     => [
             't/00-report-prereqs.t',
index ef713b2..ef434f3 100644 (file)
@@ -3,7 +3,7 @@ package HTTP::Tiny;
 use strict;
 use warnings;
 # ABSTRACT: A small, simple, correct HTTP/1.1 client
-our $VERSION = '0.048'; # VERSION
+our $VERSION = '0.049'; # VERSION
 
 use Carp ();
 
@@ -53,9 +53,9 @@ use Carp ();
 #pod
 #pod The C<keep_alive> parameter enables a persistent connection, but only to a
 #pod single destination scheme, host and port.  Also, if any connection-relevant
-#pod attributes are modified, a persistent connection will be dropped.  If you want
-#pod persistent connections across multiple destinations, use multiple HTTP::Tiny
-#pod objects.
+#pod attributes are modified, or if the process ID or thread ID change, the
+#pod persistent connection will be dropped.  If you want persistent connections
+#pod across multiple destinations, use multiple HTTP::Tiny objects.
 #pod
 #pod See L</SSL SUPPORT> for more on the C<verify_SSL> and C<SSL_options> attributes.
 #pod
@@ -861,6 +861,15 @@ use warnings;
 use Errno      qw[EINTR EPIPE];
 use IO::Socket qw[SOCK_STREAM];
 
+# for thread safety, we need to know thread id or else fake it;
+# requires "threads.pm" to hide it from the minimum version detector
+if ( eval { require "threads.pm"; 1 } ) { ## no critic
+    *_get_tid = sub { threads->tid };
+}
+else {
+    *_get_tid = sub () { 0 };
+}
+
 # PERL_HTTP_TINY_IPV4_ONLY is a private environment variable to force old
 # behavior if someone is unable to boostrap CPAN from a new perl install; it is
 # not intended for general, per-client use and may be removed in the future
@@ -924,6 +933,8 @@ sub connect {
     $self->{scheme} = $scheme;
     $self->{host} = $host;
     $self->{port} = $port;
+    $self->{pid} = $$;
+    $self->{tid} = _get_tid();
 
     return $self;
 }
@@ -1367,7 +1378,9 @@ sub _assert_ssl {
 sub can_reuse {
     my ($self,$scheme,$host,$port) = @_;
     return 0 if
-         length($self->{rbuf})
+        $self->{pid} != $$
+        || $self->{tid} != _get_tid()
+        || length($self->{rbuf})
         || $scheme ne $self->{scheme}
         || $host ne $self->{host}
         || $port ne $self->{port}
@@ -1444,7 +1457,7 @@ HTTP::Tiny - A small, simple, correct HTTP/1.1 client
 
 =head1 VERSION
 
-version 0.048
+version 0.049
 
 =head1 SYNOPSIS
 
@@ -1554,9 +1567,9 @@ content field in the response will contain the text of the exception.
 
 The C<keep_alive> parameter enables a persistent connection, but only to a
 single destination scheme, host and port.  Also, if any connection-relevant
-attributes are modified, a persistent connection will be dropped.  If you want
-persistent connections across multiple destinations, use multiple HTTP::Tiny
-objects.
+attributes are modified, or if the process ID or thread ID change, the
+persistent connection will be dropped.  If you want persistent connections
+across multiple destinations, use multiple HTTP::Tiny objects.
 
 See L</SSL SUPPORT> for more on the C<verify_SSL> and C<SSL_options> attributes.
 
index 2428053..6698bdc 100644 (file)
@@ -156,6 +156,8 @@ sub sort_headers {
             $self->{port}   = $monkey_port = $port;
             $self->{scheme} = $scheme;
             $self->{fh} = shift @req_fh;
+            $self->{pid} = $$;
+            $self->{tid} = HTTP::Tiny::Handle::_get_tid();
             return $self;
         };
         my $original_write_request = \&HTTP::Tiny::Handle::write_request;