summaryrefslogtreecommitdiff
path: root/lib/MCE
diff options
context:
space:
mode:
authorgregor herrmann <gregoa@debian.org>2024-05-25 18:04:10 +0200
committergregor herrmann <gregoa@debian.org>2024-05-25 18:04:10 +0200
commit667b2a41066e5bfd23644b3d93f5be8f9ddda053 (patch)
tree6bc390d4b2b1e1a678e36ff2ed2be3d4a065c98d /lib/MCE
parent8e8880d453cb4f914b7392e307d67e1a6079d74a (diff)
New upstream version 1.890
Diffstat (limited to 'lib/MCE')
-rw-r--r--lib/MCE/Candy.pm4
-rw-r--r--lib/MCE/Channel.pm6
-rw-r--r--lib/MCE/Channel/Mutex.pm4
-rw-r--r--lib/MCE/Channel/MutexFast.pm4
-rw-r--r--lib/MCE/Channel/Simple.pm4
-rw-r--r--lib/MCE/Channel/SimpleFast.pm4
-rw-r--r--lib/MCE/Channel/Threads.pm4
-rw-r--r--lib/MCE/Channel/ThreadsFast.pm4
-rw-r--r--lib/MCE/Child.pm104
-rw-r--r--lib/MCE/Core.pod2
-rw-r--r--lib/MCE/Core/Input/Generator.pm4
-rw-r--r--lib/MCE/Core/Input/Handle.pm4
-rw-r--r--lib/MCE/Core/Input/Iterator.pm4
-rw-r--r--lib/MCE/Core/Input/Request.pm4
-rw-r--r--lib/MCE/Core/Input/Sequence.pm4
-rw-r--r--lib/MCE/Core/Manager.pm4
-rw-r--r--lib/MCE/Core/Validation.pm4
-rw-r--r--lib/MCE/Core/Worker.pm4
-rw-r--r--lib/MCE/Examples.pod2
-rw-r--r--lib/MCE/Flow.pm4
-rw-r--r--lib/MCE/Grep.pm4
-rw-r--r--lib/MCE/Loop.pm4
-rw-r--r--lib/MCE/Map.pm4
-rw-r--r--lib/MCE/Mutex.pm4
-rw-r--r--lib/MCE/Mutex/Channel.pm4
-rw-r--r--lib/MCE/Mutex/Channel2.pm4
-rw-r--r--lib/MCE/Mutex/Flock.pm4
-rw-r--r--lib/MCE/Queue.pm4
-rw-r--r--lib/MCE/Relay.pm4
-rw-r--r--lib/MCE/Signal.pm4
-rw-r--r--lib/MCE/Step.pm4
-rw-r--r--lib/MCE/Stream.pm4
-rw-r--r--lib/MCE/Subs.pm4
-rw-r--r--lib/MCE/Util.pm4
34 files changed, 112 insertions, 122 deletions
diff --git a/lib/MCE/Candy.pm b/lib/MCE/Candy.pm
index f25897d..32cfae3 100644
--- a/lib/MCE/Candy.pm
+++ b/lib/MCE/Candy.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
our @CARP_NOT = qw( MCE );
@@ -240,7 +240,7 @@ MCE::Candy - Sugar methods and output iterators
=head1 VERSION
-This document describes MCE::Candy version 1.889
+This document describes MCE::Candy version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Channel.pm b/lib/MCE/Channel.pm
index 3693780..14275d3 100644
--- a/lib/MCE/Channel.pm
+++ b/lib/MCE/Channel.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( uninitialized once );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## no critic (BuiltinFunctions::ProhibitStringyEval)
## no critic (TestingAndDebugging::ProhibitNoStrict)
@@ -131,7 +131,7 @@ MCE::Channel - Queue-like and two-way communication capability
=head1 VERSION
-This document describes MCE::Channel version 1.889
+This document describes MCE::Channel version 1.890
=head1 SYNOPSIS
@@ -735,7 +735,7 @@ Mario E. Roy, S<E<lt>marioeroy AT gmail DOT comE<gt>>
=head1 COPYRIGHT AND LICENSE
-Copyright (C) 2019-2023 by Mario E. Roy
+Copyright (C) 2019-2024 by Mario E. Roy
MCE::Channel is released under the same license as Perl.
diff --git a/lib/MCE/Channel/Mutex.pm b/lib/MCE/Channel/Mutex.pm
index 5136c97..f23f876 100644
--- a/lib/MCE/Channel/Mutex.pm
+++ b/lib/MCE/Channel/Mutex.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( uninitialized once );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
use base 'MCE::Channel';
use MCE::Mutex ();
@@ -296,7 +296,7 @@ MCE::Channel::Mutex - Channel for producer(s) and many consumers
=head1 VERSION
-This document describes MCE::Channel::Mutex version 1.889
+This document describes MCE::Channel::Mutex version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Channel/MutexFast.pm b/lib/MCE/Channel/MutexFast.pm
index b1cc56b..b5280c6 100644
--- a/lib/MCE/Channel/MutexFast.pm
+++ b/lib/MCE/Channel/MutexFast.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( uninitialized once );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
use base 'MCE::Channel';
use MCE::Mutex ();
@@ -300,7 +300,7 @@ MCE::Channel::MutexFast - Fast channel for producer(s) and many consumers
=head1 VERSION
-This document describes MCE::Channel::MutexFast version 1.889
+This document describes MCE::Channel::MutexFast version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Channel/Simple.pm b/lib/MCE/Channel/Simple.pm
index fa17548..80d72ce 100644
--- a/lib/MCE/Channel/Simple.pm
+++ b/lib/MCE/Channel/Simple.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( uninitialized once );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
use base 'MCE::Channel';
@@ -292,7 +292,7 @@ MCE::Channel::Simple - Channel tuned for one producer and one consumer
=head1 VERSION
-This document describes MCE::Channel::Simple version 1.889
+This document describes MCE::Channel::Simple version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Channel/SimpleFast.pm b/lib/MCE/Channel/SimpleFast.pm
index a7cc85f..d719007 100644
--- a/lib/MCE/Channel/SimpleFast.pm
+++ b/lib/MCE/Channel/SimpleFast.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( uninitialized once );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
use base 'MCE::Channel';
@@ -300,7 +300,7 @@ MCE::Channel::SimpleFast - Fast channel tuned for one producer and one consumer
=head1 VERSION
-This document describes MCE::Channel::SimpleFast version 1.889
+This document describes MCE::Channel::SimpleFast version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Channel/Threads.pm b/lib/MCE/Channel/Threads.pm
index 5d9ea5d..97374e7 100644
--- a/lib/MCE/Channel/Threads.pm
+++ b/lib/MCE/Channel/Threads.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( uninitialized once );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
use threads;
use threads::shared;
@@ -315,7 +315,7 @@ MCE::Channel::Threads - Channel for producer(s) and many consumers
=head1 VERSION
-This document describes MCE::Channel::Threads version 1.889
+This document describes MCE::Channel::Threads version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Channel/ThreadsFast.pm b/lib/MCE/Channel/ThreadsFast.pm
index 4ebc4de..3a6b604 100644
--- a/lib/MCE/Channel/ThreadsFast.pm
+++ b/lib/MCE/Channel/ThreadsFast.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( uninitialized once );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
use threads;
use threads::shared;
@@ -321,7 +321,7 @@ MCE::Channel::ThreadsFast - Fast channel for producer(s) and many consumers
=head1 VERSION
-This document describes MCE::Channel::ThreadsFast version 1.889
+This document describes MCE::Channel::ThreadsFast version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Child.pm b/lib/MCE/Child.pm
index f0482e9..c3ad0a9 100644
--- a/lib/MCE/Child.pm
+++ b/lib/MCE/Child.pm
@@ -11,7 +11,7 @@ no warnings qw( threads recursion uninitialized once redefine );
package MCE::Child;
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## no critic (BuiltinFunctions::ProhibitStringyEval)
## no critic (Subroutines::ProhibitExplicitReturnUndef)
@@ -49,6 +49,7 @@ my ( $_MNGD, $_DATA, $_DELY, $_LIST ) = ( {}, {}, {}, {} );
my $_is_MSWin32 = ( $^O eq 'MSWin32' ) ? 1 : 0;
my $_tid = ( $INC{'threads.pm'} ) ? threads->tid() : 0;
+my $_yield_secs = ( $^O =~ /mswin|mingw|msys|cygwin/i ) ? 0.015 : 0.008;
sub CLONE {
$_tid = threads->tid(), &_clear() if $INC{'threads.pm'};
@@ -86,8 +87,9 @@ sub init {
# max_workers child_timeout posix_exit on_start on_finish void_context
# ---------------------------------------------------------------------
- my $pkg = "$$.$_tid.".( caller eq __PACKAGE__ ? caller(1) : caller );
- my $mngd = $_MNGD->{$pkg} = ( ref $_[0] eq 'HASH' ) ? shift : { @_ };
+ my $opt = ( ref $_[0] eq 'HASH' ) ? shift : { @_ };
+ my $pkg = "$$.$_tid.".( delete $opt->{caller} || caller() );
+ my $mngd = $_MNGD->{$pkg} = $opt;
@_ = ();
@@ -155,9 +157,11 @@ sub mce_child (&;@) {
}
sub create {
- my $mngd = $_MNGD->{ "$$.$_tid.".caller() } || do {
+ my $caller = caller();
+
+ my $mngd = $_MNGD->{ "$$.$_tid.$caller" } || do {
# construct mngd internally on first use unless defined
- init(); $_MNGD->{ "$$.$_tid.".caller() };
+ init( caller => $caller ); $_MNGD->{ "$$.$_tid.$caller" };
};
shift if ( $_[0] eq __PACKAGE__ );
@@ -170,7 +174,7 @@ sub create {
$self->{MGR_ID} = $mngd->{MGR_ID}, $self->{PKG} = $mngd->{PKG};
$self->{ident } = shift if ( !ref $_[0] && ref $_[1] eq 'CODE' );
- my $func = shift; $func = caller().'::'.$func
+ my $func = shift; $func = $caller.'::'.$func
if ( !ref $func && length $func && index($func,':') < 0 );
if ( !defined $func ) {
@@ -184,21 +188,23 @@ sub create {
$_DATA->{"$pkg:id"} = 10000 if ( ( my $id = ++$_DATA->{"$pkg:id"} ) >= 2e9 );
- {
- # Reap completed child processes.
- local ($SIG{CHLD}, $!, $?, $_); map {
- waitpid($_, 0); _reap_child($list->del($_), 0); ();
+ # Reap completed child processes.
+ if ( $self->{IGNORE} || ($max_workers && $list->len() >= $max_workers) ) {
+ local ($SIG{CHLD}, $!, $?, $_);
+ map {
+ $_ = substr($_, 1); # strip leading 'R'
+ my $child = $list->del($_);
+ if ( ! $child->{REAPED} ) {
+ waitpid($child->{WRK_ID}, 0);
+ _reap_child($child, 0);
+ }
+ ();
}
- $_DATA->{$pkg}->reap_data;
+ $_DATA->{$pkg}->get_done();
}
- if ( $max_workers || $self->{IGNORE} ) {
- # Wait for a slot if saturated.
- if ( $max_workers && $list->len() >= $max_workers ) {
- my $count = $list->len() - $max_workers + 1;
- _wait_one($pkg) for 1 .. $count;
- }
- }
+ # Wait for a slot if saturated.
+ _wait_one($pkg) if ( $max_workers && $list->len() >= $max_workers );
# ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~ ~~~
@@ -307,7 +313,8 @@ sub exit {
}
elsif ( $wrk_id == $$ ) {
alarm 0; my ( $exit_status, @res ) = @_; $? = $exit_status || 0;
- $_DATA->{$pkg}->set('R'.$wrk_id, @res ? \@res : '');
+ $_DATA->{$pkg}->set('R'.$wrk_id, @res ? \@res : '')
+ unless $self->{IGNORE};
die "Child exited ($?)\n";
_exit($?); # not reached
}
@@ -315,7 +322,7 @@ sub exit {
return $self if $self->{REAPED};
if ( exists $_DATA->{$pkg} ) {
- sleep 0.015 until $_DATA->{$pkg}->exists('S'.$wrk_id);
+ sleep $_yield_secs until $_DATA->{$pkg}->exists('S'.$wrk_id);
} else {
sleep 0.030;
}
@@ -441,7 +448,7 @@ sub kill {
if ( $self->{MGR_ID} eq "$$.$_tid" ) {
return $self if $self->{REAPED};
if ( exists $_DATA->{$pkg} ) {
- sleep 0.015 until $_DATA->{$pkg}->exists('S'.$wrk_id);
+ sleep $_yield_secs until $_DATA->{$pkg}->exists('S'.$wrk_id);
} else {
sleep 0.030;
}
@@ -471,9 +478,7 @@ sub list_joinable {
my $pkg = "$$.$_tid.".caller();
return () unless ( my $list = $_LIST->{$pkg} );
- local ($!, $?, $_);
-
- $_DATA->{$pkg}->reap_data;
+ local ($!, $?, $_); $_DATA->{$pkg}->reap_data;
map {
( waitpid($_->{WRK_ID}, _WNOHANG) == 0 ) ? () : do {
@@ -489,9 +494,7 @@ sub list_running {
my $pkg = "$$.$_tid.".caller();
return () unless ( my $list = $_LIST->{$pkg} );
- local ($!, $?, $_);
-
- $_DATA->{$pkg}->reap_data;
+ local ($!, $?, $_); $_DATA->{$pkg}->reap_data;
map {
( waitpid($_->{WRK_ID}, _WNOHANG) == 0 ) ? $_ : do {
@@ -691,7 +694,7 @@ sub _force_reap {
next if $child->{IGNORE};
if ( $child->is_running() ) {
- sleep(0.015), CORE::kill('KILL', $child->pid())
+ sleep($_yield_secs), CORE::kill('KILL', $child->pid())
if CORE::kill('ZERO', $child->pid());
$count++;
}
@@ -726,7 +729,7 @@ sub _reap_child {
my ( $child, $wait_flag ) = @_;
return unless $child;
- local @_ = $_DATA->{ $child->{PKG} }->get( $child->{WRK_ID}, $wait_flag );
+ local @_ = $_DATA->{ $child->{PKG} }->get($child->{WRK_ID}, $wait_flag);
( $child->{ERROR}, $child->{RESULT}, $child->{REAPED} ) =
( pop || '', length $_[0] ? pop : [], 1 );
@@ -791,7 +794,7 @@ sub _wait_one {
$self = $list->del($wrk_id), last if waitpid($wrk_id, _WNOHANG);
}
last if $self;
- sleep 0.030;
+ sleep $_yield_secs;
}
_reap_child($self, 0);
@@ -856,36 +859,36 @@ use constant {
sub new {
my ( $class, $chnl ) = @_;
-
bless [ {}, $chnl ], shift;
}
sub clear {
my ( $self ) = @_;
-
1 while ( $self->[1]->recv2_nb() );
-
%{ $self->[0] } = ();
}
sub exists {
my ( $self, $key ) = @_;
+ $self->reap_data;
+ CORE::exists $self->[0]{ $key };
+}
- while ( my $data = $self->[1]->recv2_nb() ) {
- $self->[0]{ $data->[0] } = $data->[1];
+sub get_done {
+ my ( $self ) = @_;
+ my @ret;
+
+ $self->reap_data;
+ for my $key (keys %{ $self->[0] }) {
+ push @ret, $key if ( substr($key, 0, 1) eq 'R' );
}
- CORE::exists $self->[0]{ $key };
+ return @ret;
}
sub get {
my ( $self, $wrk_id, $wait_flag ) = @_;
-
- if ( !CORE::exists $self->[0]{ 'R'.$wrk_id } ) {
- while ( my $data = $self->[1]->recv2_nb() ) {
- $self->[0]{ $data->[0] } = $data->[1];
- }
- }
+ $self->reap_data if ( !CORE::exists $self->[0]{ 'R'.$wrk_id } );
if ( $wait_flag ) {
local $!;
@@ -899,11 +902,7 @@ sub get {
$self->[0]{ $data->[0] } = $data->[1];
waitpid($wrk_id, 0), last if $data->[0] eq 'R'.$wrk_id;
}
- if ( !CORE::exists $self->[0]{ 'R'.$wrk_id } ) {
- while ( my $data = $self->[1]->recv2_nb() ) {
- $self->[0]{ $data->[0] } = $data->[1];
- }
- }
+ $self->reap_data if ( !CORE::exists $self->[0]{ 'R'.$wrk_id } );
};
}
@@ -919,15 +918,6 @@ sub get {
sub reap_data {
my ( $self ) = @_;
- if (wantarray) {
- my @ret;
- while ( my $data = $self->[1]->recv2_nb() ) {
- push @ret, substr($data->[0], 1) if substr($data->[0], 0, 1) eq 'R';
- $self->[0]{ $data->[0] } = $data->[1];
- }
- return @ret;
- }
-
while ( my $data = $self->[1]->recv2_nb() ) {
$self->[0]{ $data->[0] } = $data->[1];
}
@@ -1007,7 +997,7 @@ MCE::Child - A threads-like parallelization module compatible with Perl 5.8
=head1 VERSION
-This document describes MCE::Child version 1.889
+This document describes MCE::Child version 1.890
=head1 SYNOPSIS
diff --git a/lib/MCE/Core.pod b/lib/MCE/Core.pod
index ef2e0c6..e7053a6 100644
--- a/lib/MCE/Core.pod
+++ b/lib/MCE/Core.pod
@@ -5,7 +5,7 @@ MCE::Core - Documentation describing the core MCE API
=head1 VERSION
-This document describes MCE::Core version 1.889
+This document describes MCE::Core version 1.890
=head1 SYNOPSIS
diff --git a/lib/MCE/Core/Input/Generator.pm b/lib/MCE/Core/Input/Generator.pm
index 5eb06ca..d37d3e1 100644
--- a/lib/MCE/Core/Input/Generator.pm
+++ b/lib/MCE/Core/Input/Generator.pm
@@ -15,7 +15,7 @@ package MCE::Core::Input::Generator;
use strict;
use warnings;
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## Items below are folded into MCE.
@@ -220,7 +220,7 @@ MCE::Core::Input::Generator - Sequence of numbers (for task_id > 0)
=head1 VERSION
-This document describes MCE::Core::Input::Generator version 1.889
+This document describes MCE::Core::Input::Generator version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Core/Input/Handle.pm b/lib/MCE/Core/Input/Handle.pm
index cb6ff04..de94368 100644
--- a/lib/MCE/Core/Input/Handle.pm
+++ b/lib/MCE/Core/Input/Handle.pm
@@ -14,7 +14,7 @@ package MCE::Core::Input::Handle;
use strict;
use warnings;
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## Items below are folded into MCE.
@@ -278,7 +278,7 @@ MCE::Core::Input::Handle - File path and Scalar reference input reader
=head1 VERSION
-This document describes MCE::Core::Input::Handle version 1.889
+This document describes MCE::Core::Input::Handle version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Core/Input/Iterator.pm b/lib/MCE/Core/Input/Iterator.pm
index 0734650..2983e0b 100644
--- a/lib/MCE/Core/Input/Iterator.pm
+++ b/lib/MCE/Core/Input/Iterator.pm
@@ -14,7 +14,7 @@ package MCE::Core::Input::Iterator;
use strict;
use warnings;
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## Items below are folded into MCE.
@@ -129,7 +129,7 @@ MCE::Core::Input::Iterator - Iterator reader
=head1 VERSION
-This document describes MCE::Core::Input::Iterator version 1.889
+This document describes MCE::Core::Input::Iterator version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Core/Input/Request.pm b/lib/MCE/Core/Input/Request.pm
index fb4b00b..f9ecf6c 100644
--- a/lib/MCE/Core/Input/Request.pm
+++ b/lib/MCE/Core/Input/Request.pm
@@ -14,7 +14,7 @@ package MCE::Core::Input::Request;
use strict;
use warnings;
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## Items below are folded into MCE.
@@ -200,7 +200,7 @@ MCE::Core::Input::Request - Array reference and Glob reference input reader
=head1 VERSION
-This document describes MCE::Core::Input::Request version 1.889
+This document describes MCE::Core::Input::Request version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Core/Input/Sequence.pm b/lib/MCE/Core/Input/Sequence.pm
index 7955709..4681021 100644
--- a/lib/MCE/Core/Input/Sequence.pm
+++ b/lib/MCE/Core/Input/Sequence.pm
@@ -14,7 +14,7 @@ package MCE::Core::Input::Sequence;
use strict;
use warnings;
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## Items below are folded into MCE.
@@ -229,7 +229,7 @@ MCE::Core::Input::Sequence - Sequence of numbers (for task_id == 0)
=head1 VERSION
-This document describes MCE::Core::Input::Sequence version 1.889
+This document describes MCE::Core::Input::Sequence version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Core/Manager.pm b/lib/MCE/Core/Manager.pm
index 7c40b17..4310cec 100644
--- a/lib/MCE/Core/Manager.pm
+++ b/lib/MCE/Core/Manager.pm
@@ -14,7 +14,7 @@ package MCE::Core::Manager;
use strict;
use warnings;
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## no critic (BuiltinFunctions::ProhibitStringyEval)
## no critic (TestingAndDebugging::ProhibitNoStrict)
@@ -1041,7 +1041,7 @@ MCE::Core::Manager - Core methods for the manager process
=head1 VERSION
-This document describes MCE::Core::Manager version 1.889
+This document describes MCE::Core::Manager version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Core/Validation.pm b/lib/MCE/Core/Validation.pm
index 3a0b816..305364d 100644
--- a/lib/MCE/Core/Validation.pm
+++ b/lib/MCE/Core/Validation.pm
@@ -14,7 +14,7 @@ package MCE::Core::Validation;
use strict;
use warnings;
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## Items below are folded into MCE.
@@ -402,7 +402,7 @@ MCE::Core::Validation - Core validation methods for Many-Core Engine
=head1 VERSION
-This document describes MCE::Core::Validation version 1.889
+This document describes MCE::Core::Validation version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Core/Worker.pm b/lib/MCE/Core/Worker.pm
index 8562fbd..5e732d9 100644
--- a/lib/MCE/Core/Worker.pm
+++ b/lib/MCE/Core/Worker.pm
@@ -14,7 +14,7 @@ package MCE::Core::Worker;
use strict;
use warnings;
-our $VERSION = '1.889';
+our $VERSION = '1.890';
my $_tid = $INC{'threads.pm'} ? threads->tid() : 0;
@@ -738,7 +738,7 @@ MCE::Core::Worker - Core methods for the worker process
=head1 VERSION
-This document describes MCE::Core::Worker version 1.889
+This document describes MCE::Core::Worker version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Examples.pod b/lib/MCE/Examples.pod
index 2d8e2d7..b9bf808 100644
--- a/lib/MCE/Examples.pod
+++ b/lib/MCE/Examples.pod
@@ -5,7 +5,7 @@ MCE::Examples - Various examples and demonstrations
=head1 VERSION
-This document describes MCE::Examples version 1.889
+This document describes MCE::Examples version 1.890
=head1 INCLUDED WITH THE DISTRIBUTION
diff --git a/lib/MCE/Flow.pm b/lib/MCE/Flow.pm
index e5c6330..0c276fc 100644
--- a/lib/MCE/Flow.pm
+++ b/lib/MCE/Flow.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## no critic (BuiltinFunctions::ProhibitStringyEval)
## no critic (Subroutines::ProhibitSubroutinePrototypes)
@@ -482,7 +482,7 @@ MCE::Flow - Parallel flow model for building creative applications
=head1 VERSION
-This document describes MCE::Flow version 1.889
+This document describes MCE::Flow version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Grep.pm b/lib/MCE/Grep.pm
index 37b6461..ef98bca 100644
--- a/lib/MCE/Grep.pm
+++ b/lib/MCE/Grep.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## no critic (BuiltinFunctions::ProhibitStringyEval)
## no critic (Subroutines::ProhibitSubroutinePrototypes)
@@ -453,7 +453,7 @@ MCE::Grep - Parallel grep model similar to the native grep function
=head1 VERSION
-This document describes MCE::Grep version 1.889
+This document describes MCE::Grep version 1.890
=head1 SYNOPSIS
diff --git a/lib/MCE/Loop.pm b/lib/MCE/Loop.pm
index 59e5342..800a192 100644
--- a/lib/MCE/Loop.pm
+++ b/lib/MCE/Loop.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## no critic (BuiltinFunctions::ProhibitStringyEval)
## no critic (Subroutines::ProhibitSubroutinePrototypes)
@@ -364,7 +364,7 @@ MCE::Loop - MCE model for building parallel loops
=head1 VERSION
-This document describes MCE::Loop version 1.889
+This document describes MCE::Loop version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Map.pm b/lib/MCE/Map.pm
index b3e62fe..415d91b 100644
--- a/lib/MCE/Map.pm
+++ b/lib/MCE/Map.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## no critic (BuiltinFunctions::ProhibitStringyEval)
## no critic (Subroutines::ProhibitSubroutinePrototypes)
@@ -453,7 +453,7 @@ MCE::Map - Parallel map model similar to the native map function
=head1 VERSION
-This document describes MCE::Map version 1.889
+This document describes MCE::Map version 1.890
=head1 SYNOPSIS
diff --git a/lib/MCE/Mutex.pm b/lib/MCE/Mutex.pm
index 3a937e5..36bc21b 100644
--- a/lib/MCE/Mutex.pm
+++ b/lib/MCE/Mutex.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## no critic (BuiltinFunctions::ProhibitStringyEval)
## no critic (TestingAndDebugging::ProhibitNoStrict)
@@ -64,7 +64,7 @@ MCE::Mutex - Locking for Many-Core Engine
=head1 VERSION
-This document describes MCE::Mutex version 1.889
+This document describes MCE::Mutex version 1.890
=head1 SYNOPSIS
diff --git a/lib/MCE/Mutex/Channel.pm b/lib/MCE/Mutex/Channel.pm
index 80fa9c5..51bf3ac 100644
--- a/lib/MCE/Mutex/Channel.pm
+++ b/lib/MCE/Mutex/Channel.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized once );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
use if $^O eq 'MSWin32', 'threads';
use if $^O eq 'MSWin32', 'threads::shared';
@@ -187,7 +187,7 @@ MCE::Mutex::Channel - Mutex locking via a pipe or socket
=head1 VERSION
-This document describes MCE::Mutex::Channel version 1.889
+This document describes MCE::Mutex::Channel version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Mutex/Channel2.pm b/lib/MCE/Mutex/Channel2.pm
index f72fe0c..1b59b7d 100644
--- a/lib/MCE/Mutex/Channel2.pm
+++ b/lib/MCE/Mutex/Channel2.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized once );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
use if $^O eq 'MSWin32', 'threads';
use if $^O eq 'MSWin32', 'threads::shared';
@@ -154,7 +154,7 @@ MCE::Mutex::Channel2 - Provides two mutexes using a single channel
=head1 VERSION
-This document describes MCE::Mutex::Channel2 version 1.889
+This document describes MCE::Mutex::Channel2 version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Mutex/Flock.pm b/lib/MCE/Mutex/Flock.pm
index 47121d6..e23d600 100644
--- a/lib/MCE/Mutex/Flock.pm
+++ b/lib/MCE/Mutex/Flock.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized once );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
use base 'MCE::Mutex';
use Fcntl ':flock';
@@ -211,7 +211,7 @@ MCE::Mutex::Flock - Mutex locking via Fcntl
=head1 VERSION
-This document describes MCE::Mutex::Flock version 1.889
+This document describes MCE::Mutex::Flock version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Queue.pm b/lib/MCE/Queue.pm
index c7f88f4..0e1727e 100644
--- a/lib/MCE/Queue.pm
+++ b/lib/MCE/Queue.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## no critic (Subroutines::ProhibitExplicitReturnUndef)
## no critic (TestingAndDebugging::ProhibitNoStrict)
@@ -1506,7 +1506,7 @@ MCE::Queue - Hybrid (normal and priority) queues
=head1 VERSION
-This document describes MCE::Queue version 1.889
+This document describes MCE::Queue version 1.890
=head1 SYNOPSIS
diff --git a/lib/MCE/Relay.pm b/lib/MCE/Relay.pm
index 531f77f..e5afd7d 100644
--- a/lib/MCE/Relay.pm
+++ b/lib/MCE/Relay.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized numeric );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## no critic (Subroutines::ProhibitSubroutinePrototypes)
@@ -368,7 +368,7 @@ MCE::Relay - Extends Many-Core Engine with relay capabilities
=head1 VERSION
-This document describes MCE::Relay version 1.889
+This document describes MCE::Relay version 1.890
=head1 SYNOPSIS
diff --git a/lib/MCE/Signal.pm b/lib/MCE/Signal.pm
index 8c75ae3..9fe89a9 100644
--- a/lib/MCE/Signal.pm
+++ b/lib/MCE/Signal.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized once );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## no critic (BuiltinFunctions::ProhibitStringyEval)
@@ -445,7 +445,7 @@ MCE::Signal - Temporary directory creation/cleanup and signal handling
=head1 VERSION
-This document describes MCE::Signal version 1.889
+This document describes MCE::Signal version 1.890
=head1 SYNOPSIS
diff --git a/lib/MCE/Step.pm b/lib/MCE/Step.pm
index e34e2f5..7f749fa 100644
--- a/lib/MCE/Step.pm
+++ b/lib/MCE/Step.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## no critic (BuiltinFunctions::ProhibitStringyEval)
## no critic (Subroutines::ProhibitSubroutinePrototypes)
@@ -700,7 +700,7 @@ MCE::Step - Parallel step model for building creative steps
=head1 VERSION
-This document describes MCE::Step version 1.889
+This document describes MCE::Step version 1.890
=head1 DESCRIPTION
diff --git a/lib/MCE/Stream.pm b/lib/MCE/Stream.pm
index 19ecd31..23fea7c 100644
--- a/lib/MCE/Stream.pm
+++ b/lib/MCE/Stream.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## no critic (BuiltinFunctions::ProhibitStringyEval)
## no critic (Subroutines::ProhibitSubroutinePrototypes)
@@ -678,7 +678,7 @@ MCE::Stream - Parallel stream model for chaining multiple maps and greps
=head1 VERSION
-This document describes MCE::Stream version 1.889
+This document describes MCE::Stream version 1.890
=head1 SYNOPSIS
diff --git a/lib/MCE/Subs.pm b/lib/MCE/Subs.pm
index 7326198..e056b99 100644
--- a/lib/MCE/Subs.pm
+++ b/lib/MCE/Subs.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## no critic (Subroutines::ProhibitSubroutinePrototypes)
## no critic (TestingAndDebugging::ProhibitNoStrict)
@@ -204,7 +204,7 @@ MCE::Subs - Exports functions mapped directly to MCE methods
=head1 VERSION
-This document describes MCE::Subs version 1.889
+This document describes MCE::Subs version 1.890
=head1 SYNOPSIS
diff --git a/lib/MCE/Util.pm b/lib/MCE/Util.pm
index 22c2ba6..d84ef54 100644
--- a/lib/MCE/Util.pm
+++ b/lib/MCE/Util.pm
@@ -11,7 +11,7 @@ use warnings;
no warnings qw( threads recursion uninitialized numeric );
-our $VERSION = '1.889';
+our $VERSION = '1.890';
## no critic (BuiltinFunctions::ProhibitStringyEval)
@@ -435,7 +435,7 @@ MCE::Util - Utility functions
=head1 VERSION
-This document describes MCE::Util version 1.889
+This document describes MCE::Util version 1.890
=head1 SYNOPSIS