This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade to threads 1.87
authorJerry D. Hedden <jdhedden@cpan.org>
Tue, 28 May 2013 15:20:56 +0000 (11:20 -0400)
committerJames E Keenan <jkeenan@cpan.org>
Tue, 28 May 2013 23:27:56 +0000 (01:27 +0200)
Porting/Maintainers.pl
dist/threads/lib/threads.pm
dist/threads/t/exit.t
dist/threads/t/kill2.t
dist/threads/t/thread.t
dist/threads/threads.xs

index 560d7f8..6045bd8 100755 (executable)
@@ -1794,7 +1794,7 @@ use File::Glob qw(:case);
 
     'threads' => {
         'MAINTAINER'   => 'jdhedden',
-        'DISTRIBUTION' => 'JDHEDDEN/threads-1.86.tar.gz',
+        'DISTRIBUTION' => 'JDHEDDEN/threads-1.87.tar.gz',
         'FILES'        => q[dist/threads],
         'EXCLUDED'     => [
             qr{^examples/},
index 3c55886..4addf9c 100644 (file)
@@ -5,7 +5,7 @@ use 5.008;
 use strict;
 use warnings;
 
-our $VERSION = '1.86';
+our $VERSION = '1.87';
 my $XS_VERSION = $VERSION;
 $VERSION = eval $VERSION;
 
@@ -134,7 +134,7 @@ threads - Perl interpreter-based threads
 
 =head1 VERSION
 
-This document describes threads version 1.86
+This document describes threads version 1.87
 
 =head1 SYNOPSIS
 
@@ -785,7 +785,7 @@ current operation has completed.  For instance, if the thread is I<stuck> on
 an I/O call, sending it a signal will not cause the I/O call to be interrupted
 such that the signal is acted up immediately.
 
-Sending a signal to a terminated thread is ignored.
+Sending a signal to a terminated/finished thread is ignored.
 
 =head1 WARNINGS
 
@@ -841,7 +841,7 @@ C<useithreads> configuration option.
 Having threads support requires all of Perl and all of the XS modules in the
 Perl installation to be rebuilt; it is not just a question of adding the
 L<threads> module (i.e., threaded and non-threaded Perls are binary
-incompatible.)
+incompatible).
 
 =item Cannot change stack size of an existing thread
 
@@ -1006,7 +1006,7 @@ the C<-E<gt>kill()> signalling method cannot be used.
 
 =item Returning closures from threads
 
-Returning closures from threads should not be relied upon.  Depending of the
+Returning closures from threads should not be relied upon.  Depending on the
 Perl version and the application code, results may range from success, to
 (apparently harmless) warnings of leaked scalar, or all the way up to crashing
 of the Perl interpreter.
index 5d30950..33a3ec0 100644 (file)
@@ -48,7 +48,7 @@ my $rc = $thr->join();
 ok(! defined($rc), 'Exited: threads->exit()');
 
 
-run_perl(prog => 'use threads 1.86;' .
+run_perl(prog => 'use threads 1.87;' .
                  'threads->exit(86);' .
                  'exit(99);',
          nolib => ($ENV{PERL_CORE}) ? 0 : 1,
@@ -98,7 +98,7 @@ $rc = $thr->join();
 ok(! defined($rc), 'Exited: $thr->set_thread_exit_only');
 
 
-run_perl(prog => 'use threads 1.86 qw(exit thread_only);' .
+run_perl(prog => 'use threads 1.87 qw(exit thread_only);' .
                  'threads->create(sub { exit(99); })->join();' .
                  'exit(86);',
          nolib => ($ENV{PERL_CORE}) ? 0 : 1,
@@ -108,7 +108,7 @@ run_perl(prog => 'use threads 1.86 qw(exit thread_only);' .
     is($?>>8, 86, "'use threads 'exit' => 'thread_only'");
 }
 
-my $out = run_perl(prog => 'use threads 1.86;' .
+my $out = run_perl(prog => 'use threads 1.87;' .
                            'threads->create(sub {' .
                            '    exit(99);' .
                            '});' .
@@ -124,7 +124,7 @@ my $out = run_perl(prog => 'use threads 1.86;' .
 like($out, '1 finished and unjoined', "exit(status) in thread");
 
 
-$out = run_perl(prog => 'use threads 1.86 qw(exit thread_only);' .
+$out = run_perl(prog => 'use threads 1.87 qw(exit thread_only);' .
                         'threads->create(sub {' .
                         '   threads->set_thread_exit_only(0);' .
                         '   exit(99);' .
@@ -141,7 +141,7 @@ $out = run_perl(prog => 'use threads 1.86 qw(exit thread_only);' .
 like($out, '1 finished and unjoined', "set_thread_exit_only(0)");
 
 
-run_perl(prog => 'use threads 1.86;' .
+run_perl(prog => 'use threads 1.87;' .
                  'threads->create(sub {' .
                  '   $SIG{__WARN__} = sub { exit(99); };' .
                  '   die();' .
index 8eac55b..160b209 100644 (file)
@@ -27,7 +27,7 @@ BEGIN {
         skip_all('Not using safe signals');
     }
 
-    plan(3);
+    plan(4);
 };
 
 fresh_perl_is(<<'EOI', 'ok', { }, 'No signal handler in thread');
@@ -86,6 +86,25 @@ fresh_perl_is(<<'EOI', 'ok', { }, 'Handler and signal match');
     print((! $@) ? 'ok' : 'not ok');
 EOI
 
+fresh_perl_is(<<'EOI', 'ok', { }, 'Ignore signal after thread finishes');
+    use threads;
+
+    my $thr = threads->create(sub {
+        $SIG{KILL} = sub {
+            threads->exit();
+        };
+        return 0;
+    });
+
+    until ($thr->is_joinable()) {
+        threads->yield();
+    }
+
+    $thr->kill('SIGKILL');
+    $thr->join();
+    print((! $@) ? 'ok' : 'not ok');
+EOI
+
 exit(0);
 
 # EOF
index 548c695..2d0a97a 100644 (file)
@@ -161,7 +161,7 @@ package main;
 
 # bugid #24165
 
-run_perl(prog => 'use threads 1.86;' .
+run_perl(prog => 'use threads 1.87;' .
                  'sub a{threads->create(shift)} $t = a sub{};' .
                  '$t->tid; $t->join; $t->tid',
          nolib => ($ENV{PERL_CORE}) ? 0 : 1,
index f6fe7dc..49bf483 100644 (file)
@@ -1414,7 +1414,7 @@ ithread_kill(...)
         /* Set the signal for the thread */
         thread = S_SV_to_ithread(aTHX_ ST(0));
         MUTEX_LOCK(&thread->mutex);
-        if (thread->interp) {
+        if (thread->interp && ! (thread->state & PERL_ITHR_FINISHED)) {
             dTHXa(thread->interp);
             if (PL_psig_pend && PL_psig_ptr[signal]) {
                 PL_psig_pend[signal]++;
@@ -1422,7 +1422,7 @@ ithread_kill(...)
                 no_handler = 0;
             }
         } else {
-            /* Ignore signal to terminated thread */
+            /* Ignore signal to terminated/finished thread */
             no_handler = 0;
         }
         MUTEX_UNLOCK(&thread->mutex);