diff options
author | Étienne Mollier <emollier@debian.org> | 2023-06-21 22:08:12 +0200 |
---|---|---|
committer | Étienne Mollier <emollier@debian.org> | 2023-06-21 22:08:12 +0200 |
commit | 43911713930e89b6f664d01b0a885c9a531382fb (patch) | |
tree | f369d5fd735122f28f396d973be81664dec7cfdb /lib/MCE/Mutex/Channel2.pm | |
parent | dde6cb55cfe5be3276ef6ad97ea0c1e213c28517 (diff) |
New upstream version 1.887
Diffstat (limited to 'lib/MCE/Mutex/Channel2.pm')
-rw-r--r-- | lib/MCE/Mutex/Channel2.pm | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/lib/MCE/Mutex/Channel2.pm b/lib/MCE/Mutex/Channel2.pm index 4351325..c97ed22 100644 --- a/lib/MCE/Mutex/Channel2.pm +++ b/lib/MCE/Mutex/Channel2.pm @@ -11,7 +11,10 @@ use warnings; no warnings qw( threads recursion uninitialized once ); -our $VERSION = '1.884'; +our $VERSION = '1.887'; + +use if $^O eq 'MSWin32', 'threads'; +use if $^O eq 'MSWin32', 'threads::shared'; use base 'MCE::Mutex::Channel'; use MCE::Util (); @@ -34,12 +37,13 @@ sub CLONE { sub new { my ($class, %obj) = (@_, impl => 'Channel2'); $obj{_init_pid} = $tid ? $$ .'.'. $tid : $$; + $obj{_t_lock} = threads::shared::share( my $t_lock ) if $is_MSWin32; + $obj{_t_lock2} = threads::shared::share( my $t_lock2 ) if $is_MSWin32; MCE::Util::_sock_pair(\%obj, qw(_r_sock _w_sock), undef, 1); - CORE::syswrite($obj{_r_sock}, '0'); CORE::syswrite($obj{_w_sock}, '0'); - + CORE::syswrite($obj{_r_sock}, '0'); bless \%obj, $class; if ( caller !~ /^MCE:?/ || caller(1) !~ /^MCE:?/ ) { @@ -52,7 +56,8 @@ sub new { sub lock2 { my ($pid, $obj) = ($tid ? $$ .'.'. $tid : $$, shift); - MCE::Util::_sock_ready($obj->{_w_sock}) if $is_MSWin32; + CORE::lock($obj->{_t_lock2}), MCE::Util::_sock_ready($obj->{_w_sock}) + if $is_MSWin32; MCE::Util::_sysread($obj->{_w_sock}, my($b), 1), $obj->{ $pid.'b' } = 1 unless $obj->{ $pid.'b' }; @@ -78,7 +83,8 @@ sub synchronize2 { return unless ref($code) eq 'CODE'; # lock, run, unlock - inlined for performance - MCE::Util::_sock_ready($obj->{_w_sock}) if $is_MSWin32; + CORE::lock($obj->{_t_lock2}), MCE::Util::_sock_ready($obj->{_w_sock}) + if $is_MSWin32; MCE::Util::_sysread($obj->{_w_sock}, $b, 1), $obj->{ $pid.'b' } = 1 unless $obj->{ $pid.'b' }; @@ -136,7 +142,7 @@ MCE::Mutex::Channel2 - Provides two mutexes using a single channel =head1 VERSION -This document describes MCE::Mutex::Channel2 version 1.884 +This document describes MCE::Mutex::Channel2 version 1.887 =head1 DESCRIPTION |