New upstream version 1.865
gregor herrmann
4 years ago
0 | 0 | |
1 | 1 | Revision history for Perl module MCE. |
2 | 2 | |
3 | 1.865 Wed Dec 25 18:00:00 EST 2019 | |
4 | ||
5 | * Bug fix for two-way IPC stalling on Windows in MCE::Channel::Threads. | |
6 | See https://www.perlmonks.org/?node_id=11110612 | |
7 | ||
8 | * Remove the check for MSWin32 in MCE::Channel::Mutex. MCE::Channel since | |
9 | the 1st release silently defaults to MCE::Channel::Threads on Windows. | |
10 | ||
11 | * Small tweak to MCE::Signal. | |
12 | ||
3 | 13 | 1.864 Wed Dec 04 13:00:00 EST 2019 |
4 | 14 | |
5 | * Bug fix to MCE::Signal - Shared manager not exiting, introduced in 1.863. | |
15 | * Bug fix in MCE::Signal - Shared manager not exiting, introduced in 1.863. | |
6 | 16 | |
7 | 17 | * Use monotonic clock if available in MCE->yield and MCE::Child->yield. |
18 | See https://www.perlmonks.org/?node_id=11109673 | |
8 | 19 | |
9 | 20 | 1.863 Sun Nov 26 20:00:00 EST 2019 |
10 | 21 |
64 | 64 | "provides" : { |
65 | 65 | "MCE" : { |
66 | 66 | "file" : "lib/MCE.pm", |
67 | "version" : "1.864" | |
67 | "version" : "1.865" | |
68 | 68 | }, |
69 | 69 | "MCE::Candy" : { |
70 | 70 | "file" : "lib/MCE/Candy.pm", |
71 | "version" : "1.864" | |
71 | "version" : "1.865" | |
72 | 72 | }, |
73 | 73 | "MCE::Channel" : { |
74 | 74 | "file" : "lib/MCE/Channel.pm", |
75 | "version" : "1.864" | |
75 | "version" : "1.865" | |
76 | 76 | }, |
77 | 77 | "MCE::Channel::Mutex" : { |
78 | 78 | "file" : "lib/MCE/Channel/Mutex.pm", |
79 | "version" : "1.864" | |
79 | "version" : "1.865" | |
80 | 80 | }, |
81 | 81 | "MCE::Channel::Simple" : { |
82 | 82 | "file" : "lib/MCE/Channel/Simple.pm", |
83 | "version" : "1.864" | |
83 | "version" : "1.865" | |
84 | 84 | }, |
85 | 85 | "MCE::Channel::Threads" : { |
86 | 86 | "file" : "lib/MCE/Channel/Threads.pm", |
87 | "version" : "1.864" | |
87 | "version" : "1.865" | |
88 | 88 | }, |
89 | 89 | "MCE::Child" : { |
90 | 90 | "file" : "lib/MCE/Child.pm", |
91 | "version" : "1.864" | |
91 | "version" : "1.865" | |
92 | 92 | }, |
93 | 93 | "MCE::Core::Input::Generator" : { |
94 | 94 | "file" : "lib/MCE/Core/Input/Generator.pm", |
95 | "version" : "1.864" | |
95 | "version" : "1.865" | |
96 | 96 | }, |
97 | 97 | "MCE::Core::Input::Handle" : { |
98 | 98 | "file" : "lib/MCE/Core/Input/Handle.pm", |
99 | "version" : "1.864" | |
99 | "version" : "1.865" | |
100 | 100 | }, |
101 | 101 | "MCE::Core::Input::Iterator" : { |
102 | 102 | "file" : "lib/MCE/Core/Input/Iterator.pm", |
103 | "version" : "1.864" | |
103 | "version" : "1.865" | |
104 | 104 | }, |
105 | 105 | "MCE::Core::Input::Request" : { |
106 | 106 | "file" : "lib/MCE/Core/Input/Request.pm", |
107 | "version" : "1.864" | |
107 | "version" : "1.865" | |
108 | 108 | }, |
109 | 109 | "MCE::Core::Input::Sequence" : { |
110 | 110 | "file" : "lib/MCE/Core/Input/Sequence.pm", |
111 | "version" : "1.864" | |
111 | "version" : "1.865" | |
112 | 112 | }, |
113 | 113 | "MCE::Core::Manager" : { |
114 | 114 | "file" : "lib/MCE/Core/Manager.pm", |
115 | "version" : "1.864" | |
115 | "version" : "1.865" | |
116 | 116 | }, |
117 | 117 | "MCE::Core::Validation" : { |
118 | 118 | "file" : "lib/MCE/Core/Validation.pm", |
119 | "version" : "1.864" | |
119 | "version" : "1.865" | |
120 | 120 | }, |
121 | 121 | "MCE::Core::Worker" : { |
122 | 122 | "file" : "lib/MCE/Core/Worker.pm", |
123 | "version" : "1.864" | |
123 | "version" : "1.865" | |
124 | 124 | }, |
125 | 125 | "MCE::Flow" : { |
126 | 126 | "file" : "lib/MCE/Flow.pm", |
127 | "version" : "1.864" | |
127 | "version" : "1.865" | |
128 | 128 | }, |
129 | 129 | "MCE::Grep" : { |
130 | 130 | "file" : "lib/MCE/Grep.pm", |
131 | "version" : "1.864" | |
131 | "version" : "1.865" | |
132 | 132 | }, |
133 | 133 | "MCE::Loop" : { |
134 | 134 | "file" : "lib/MCE/Loop.pm", |
135 | "version" : "1.864" | |
135 | "version" : "1.865" | |
136 | 136 | }, |
137 | 137 | "MCE::Map" : { |
138 | 138 | "file" : "lib/MCE/Map.pm", |
139 | "version" : "1.864" | |
139 | "version" : "1.865" | |
140 | 140 | }, |
141 | 141 | "MCE::Mutex" : { |
142 | 142 | "file" : "lib/MCE/Mutex.pm", |
143 | "version" : "1.864" | |
143 | "version" : "1.865" | |
144 | 144 | }, |
145 | 145 | "MCE::Mutex::Channel" : { |
146 | 146 | "file" : "lib/MCE/Mutex/Channel.pm", |
147 | "version" : "1.864" | |
147 | "version" : "1.865" | |
148 | 148 | }, |
149 | 149 | "MCE::Mutex::Channel2" : { |
150 | 150 | "file" : "lib/MCE/Mutex/Channel2.pm", |
151 | "version" : "1.864" | |
151 | "version" : "1.865" | |
152 | 152 | }, |
153 | 153 | "MCE::Mutex::Flock" : { |
154 | 154 | "file" : "lib/MCE/Mutex/Flock.pm", |
155 | "version" : "1.864" | |
155 | "version" : "1.865" | |
156 | 156 | }, |
157 | 157 | "MCE::Queue" : { |
158 | 158 | "file" : "lib/MCE/Queue.pm", |
159 | "version" : "1.864" | |
159 | "version" : "1.865" | |
160 | 160 | }, |
161 | 161 | "MCE::Relay" : { |
162 | 162 | "file" : "lib/MCE/Relay.pm", |
163 | "version" : "1.864" | |
163 | "version" : "1.865" | |
164 | 164 | }, |
165 | 165 | "MCE::Signal" : { |
166 | 166 | "file" : "lib/MCE/Signal.pm", |
167 | "version" : "1.864" | |
167 | "version" : "1.865" | |
168 | 168 | }, |
169 | 169 | "MCE::Step" : { |
170 | 170 | "file" : "lib/MCE/Step.pm", |
171 | "version" : "1.864" | |
171 | "version" : "1.865" | |
172 | 172 | }, |
173 | 173 | "MCE::Stream" : { |
174 | 174 | "file" : "lib/MCE/Stream.pm", |
175 | "version" : "1.864" | |
175 | "version" : "1.865" | |
176 | 176 | }, |
177 | 177 | "MCE::Subs" : { |
178 | 178 | "file" : "lib/MCE/Subs.pm", |
179 | "version" : "1.864" | |
179 | "version" : "1.865" | |
180 | 180 | }, |
181 | 181 | "MCE::Util" : { |
182 | 182 | "file" : "lib/MCE/Util.pm", |
183 | "version" : "1.864" | |
183 | "version" : "1.865" | |
184 | 184 | } |
185 | 185 | }, |
186 | 186 | "release_status" : "stable", |
196 | 196 | "url" : "https://github.com/marioroy/mce-perl.git" |
197 | 197 | } |
198 | 198 | }, |
199 | "version" : "1.864" | |
199 | "version" : "1.865" | |
200 | 200 | } |
24 | 24 | provides: |
25 | 25 | MCE: |
26 | 26 | file: lib/MCE.pm |
27 | version: '1.864' | |
27 | version: '1.865' | |
28 | 28 | MCE::Candy: |
29 | 29 | file: lib/MCE/Candy.pm |
30 | version: '1.864' | |
30 | version: '1.865' | |
31 | 31 | MCE::Channel: |
32 | 32 | file: lib/MCE/Channel.pm |
33 | version: '1.864' | |
33 | version: '1.865' | |
34 | 34 | MCE::Channel::Mutex: |
35 | 35 | file: lib/MCE/Channel/Mutex.pm |
36 | version: '1.864' | |
36 | version: '1.865' | |
37 | 37 | MCE::Channel::Simple: |
38 | 38 | file: lib/MCE/Channel/Simple.pm |
39 | version: '1.864' | |
39 | version: '1.865' | |
40 | 40 | MCE::Channel::Threads: |
41 | 41 | file: lib/MCE/Channel/Threads.pm |
42 | version: '1.864' | |
42 | version: '1.865' | |
43 | 43 | MCE::Child: |
44 | 44 | file: lib/MCE/Child.pm |
45 | version: '1.864' | |
45 | version: '1.865' | |
46 | 46 | MCE::Core::Input::Generator: |
47 | 47 | file: lib/MCE/Core/Input/Generator.pm |
48 | version: '1.864' | |
48 | version: '1.865' | |
49 | 49 | MCE::Core::Input::Handle: |
50 | 50 | file: lib/MCE/Core/Input/Handle.pm |
51 | version: '1.864' | |
51 | version: '1.865' | |
52 | 52 | MCE::Core::Input::Iterator: |
53 | 53 | file: lib/MCE/Core/Input/Iterator.pm |
54 | version: '1.864' | |
54 | version: '1.865' | |
55 | 55 | MCE::Core::Input::Request: |
56 | 56 | file: lib/MCE/Core/Input/Request.pm |
57 | version: '1.864' | |
57 | version: '1.865' | |
58 | 58 | MCE::Core::Input::Sequence: |
59 | 59 | file: lib/MCE/Core/Input/Sequence.pm |
60 | version: '1.864' | |
60 | version: '1.865' | |
61 | 61 | MCE::Core::Manager: |
62 | 62 | file: lib/MCE/Core/Manager.pm |
63 | version: '1.864' | |
63 | version: '1.865' | |
64 | 64 | MCE::Core::Validation: |
65 | 65 | file: lib/MCE/Core/Validation.pm |
66 | version: '1.864' | |
66 | version: '1.865' | |
67 | 67 | MCE::Core::Worker: |
68 | 68 | file: lib/MCE/Core/Worker.pm |
69 | version: '1.864' | |
69 | version: '1.865' | |
70 | 70 | MCE::Flow: |
71 | 71 | file: lib/MCE/Flow.pm |
72 | version: '1.864' | |
72 | version: '1.865' | |
73 | 73 | MCE::Grep: |
74 | 74 | file: lib/MCE/Grep.pm |
75 | version: '1.864' | |
75 | version: '1.865' | |
76 | 76 | MCE::Loop: |
77 | 77 | file: lib/MCE/Loop.pm |
78 | version: '1.864' | |
78 | version: '1.865' | |
79 | 79 | MCE::Map: |
80 | 80 | file: lib/MCE/Map.pm |
81 | version: '1.864' | |
81 | version: '1.865' | |
82 | 82 | MCE::Mutex: |
83 | 83 | file: lib/MCE/Mutex.pm |
84 | version: '1.864' | |
84 | version: '1.865' | |
85 | 85 | MCE::Mutex::Channel: |
86 | 86 | file: lib/MCE/Mutex/Channel.pm |
87 | version: '1.864' | |
87 | version: '1.865' | |
88 | 88 | MCE::Mutex::Channel2: |
89 | 89 | file: lib/MCE/Mutex/Channel2.pm |
90 | version: '1.864' | |
90 | version: '1.865' | |
91 | 91 | MCE::Mutex::Flock: |
92 | 92 | file: lib/MCE/Mutex/Flock.pm |
93 | version: '1.864' | |
93 | version: '1.865' | |
94 | 94 | MCE::Queue: |
95 | 95 | file: lib/MCE/Queue.pm |
96 | version: '1.864' | |
96 | version: '1.865' | |
97 | 97 | MCE::Relay: |
98 | 98 | file: lib/MCE/Relay.pm |
99 | version: '1.864' | |
99 | version: '1.865' | |
100 | 100 | MCE::Signal: |
101 | 101 | file: lib/MCE/Signal.pm |
102 | version: '1.864' | |
102 | version: '1.865' | |
103 | 103 | MCE::Step: |
104 | 104 | file: lib/MCE/Step.pm |
105 | version: '1.864' | |
105 | version: '1.865' | |
106 | 106 | MCE::Stream: |
107 | 107 | file: lib/MCE/Stream.pm |
108 | version: '1.864' | |
108 | version: '1.865' | |
109 | 109 | MCE::Subs: |
110 | 110 | file: lib/MCE/Subs.pm |
111 | version: '1.864' | |
111 | version: '1.865' | |
112 | 112 | MCE::Util: |
113 | 113 | file: lib/MCE/Util.pm |
114 | version: '1.864' | |
114 | version: '1.865' | |
115 | 115 | recommends: |
116 | 116 | Sereal::Decoder: '3.015' |
117 | 117 | Sereal::Encoder: '3.015' |
138 | 138 | homepage: https://github.com/marioroy/mce-perl |
139 | 139 | license: http://dev.perl.org/licenses/ |
140 | 140 | repository: https://github.com/marioroy/mce-perl.git |
141 | version: '1.864' | |
141 | version: '1.865' |
16 | 16 | ABSTRACT => 'Many-Core Engine for Perl providing parallel processing capabilities', |
17 | 17 | AUTHOR => 'Mario E. Roy <marioeroy AT gmail DOT com>', |
18 | 18 | NAME => 'MCE', |
19 | VERSION => '1.864', | |
19 | VERSION => '1.865', | |
20 | 20 | |
21 | 21 | EXE_FILES => [ @exe_files ], |
22 | 22 | |
67 | 67 | 'provides' => { |
68 | 68 | 'MCE' => { |
69 | 69 | 'file' => 'lib/MCE.pm', |
70 | 'version' => '1.864' | |
70 | 'version' => '1.865' | |
71 | 71 | }, |
72 | 72 | 'MCE::Candy' => { |
73 | 73 | 'file' => 'lib/MCE/Candy.pm', |
74 | 'version' => '1.864' | |
74 | 'version' => '1.865' | |
75 | 75 | }, |
76 | 76 | 'MCE::Channel' => { |
77 | 77 | 'file' => 'lib/MCE/Channel.pm', |
78 | 'version' => '1.864' | |
78 | 'version' => '1.865' | |
79 | 79 | }, |
80 | 80 | 'MCE::Channel::Mutex' => { |
81 | 81 | 'file' => 'lib/MCE/Channel/Mutex.pm', |
82 | 'version' => '1.864' | |
82 | 'version' => '1.865' | |
83 | 83 | }, |
84 | 84 | 'MCE::Channel::Simple' => { |
85 | 85 | 'file' => 'lib/MCE/Channel/Simple.pm', |
86 | 'version' => '1.864' | |
86 | 'version' => '1.865' | |
87 | 87 | }, |
88 | 88 | 'MCE::Channel::Threads' => { |
89 | 89 | 'file' => 'lib/MCE/Channel/Threads.pm', |
90 | 'version' => '1.864' | |
90 | 'version' => '1.865' | |
91 | 91 | }, |
92 | 92 | 'MCE::Child' => { |
93 | 93 | 'file' => 'lib/MCE/Child.pm', |
94 | 'version' => '1.864' | |
94 | 'version' => '1.865' | |
95 | 95 | }, |
96 | 96 | 'MCE::Core::Input::Generator' => { |
97 | 97 | 'file' => 'lib/MCE/Core/Input/Generator.pm', |
98 | 'version' => '1.864' | |
98 | 'version' => '1.865' | |
99 | 99 | }, |
100 | 100 | 'MCE::Core::Input::Handle' => { |
101 | 101 | 'file' => 'lib/MCE/Core/Input/Handle.pm', |
102 | 'version' => '1.864' | |
102 | 'version' => '1.865' | |
103 | 103 | }, |
104 | 104 | 'MCE::Core::Input::Iterator' => { |
105 | 105 | 'file' => 'lib/MCE/Core/Input/Iterator.pm', |
106 | 'version' => '1.864' | |
106 | 'version' => '1.865' | |
107 | 107 | }, |
108 | 108 | 'MCE::Core::Input::Request' => { |
109 | 109 | 'file' => 'lib/MCE/Core/Input/Request.pm', |
110 | 'version' => '1.864' | |
110 | 'version' => '1.865' | |
111 | 111 | }, |
112 | 112 | 'MCE::Core::Input::Sequence' => { |
113 | 113 | 'file' => 'lib/MCE/Core/Input/Sequence.pm', |
114 | 'version' => '1.864' | |
114 | 'version' => '1.865' | |
115 | 115 | }, |
116 | 116 | 'MCE::Core::Manager' => { |
117 | 117 | 'file' => 'lib/MCE/Core/Manager.pm', |
118 | 'version' => '1.864' | |
118 | 'version' => '1.865' | |
119 | 119 | }, |
120 | 120 | 'MCE::Core::Validation' => { |
121 | 121 | 'file' => 'lib/MCE/Core/Validation.pm', |
122 | 'version' => '1.864' | |
122 | 'version' => '1.865' | |
123 | 123 | }, |
124 | 124 | 'MCE::Core::Worker' => { |
125 | 125 | 'file' => 'lib/MCE/Core/Worker.pm', |
126 | 'version' => '1.864' | |
126 | 'version' => '1.865' | |
127 | 127 | }, |
128 | 128 | 'MCE::Flow' => { |
129 | 129 | 'file' => 'lib/MCE/Flow.pm', |
130 | 'version' => '1.864' | |
130 | 'version' => '1.865' | |
131 | 131 | }, |
132 | 132 | 'MCE::Grep' => { |
133 | 133 | 'file' => 'lib/MCE/Grep.pm', |
134 | 'version' => '1.864' | |
134 | 'version' => '1.865' | |
135 | 135 | }, |
136 | 136 | 'MCE::Loop' => { |
137 | 137 | 'file' => 'lib/MCE/Loop.pm', |
138 | 'version' => '1.864' | |
138 | 'version' => '1.865' | |
139 | 139 | }, |
140 | 140 | 'MCE::Map' => { |
141 | 141 | 'file' => 'lib/MCE/Map.pm', |
142 | 'version' => '1.864' | |
142 | 'version' => '1.865' | |
143 | 143 | }, |
144 | 144 | 'MCE::Mutex' => { |
145 | 145 | 'file' => 'lib/MCE/Mutex.pm', |
146 | 'version' => '1.864' | |
146 | 'version' => '1.865' | |
147 | 147 | }, |
148 | 148 | 'MCE::Mutex::Channel' => { |
149 | 149 | 'file' => 'lib/MCE/Mutex/Channel.pm', |
150 | 'version' => '1.864' | |
150 | 'version' => '1.865' | |
151 | 151 | }, |
152 | 152 | 'MCE::Mutex::Channel2' => { |
153 | 153 | 'file' => 'lib/MCE/Mutex/Channel2.pm', |
154 | 'version' => '1.864' | |
154 | 'version' => '1.865' | |
155 | 155 | }, |
156 | 156 | 'MCE::Mutex::Flock' => { |
157 | 157 | 'file' => 'lib/MCE/Mutex/Flock.pm', |
158 | 'version' => '1.864' | |
158 | 'version' => '1.865' | |
159 | 159 | }, |
160 | 160 | 'MCE::Queue' => { |
161 | 161 | 'file' => 'lib/MCE/Queue.pm', |
162 | 'version' => '1.864' | |
162 | 'version' => '1.865' | |
163 | 163 | }, |
164 | 164 | 'MCE::Relay' => { |
165 | 165 | 'file' => 'lib/MCE/Relay.pm', |
166 | 'version' => '1.864' | |
166 | 'version' => '1.865' | |
167 | 167 | }, |
168 | 168 | 'MCE::Signal' => { |
169 | 169 | 'file' => 'lib/MCE/Signal.pm', |
170 | 'version' => '1.864' | |
170 | 'version' => '1.865' | |
171 | 171 | }, |
172 | 172 | 'MCE::Step' => { |
173 | 173 | 'file' => 'lib/MCE/Step.pm', |
174 | 'version' => '1.864' | |
174 | 'version' => '1.865' | |
175 | 175 | }, |
176 | 176 | 'MCE::Stream' => { |
177 | 177 | 'file' => 'lib/MCE/Stream.pm', |
178 | 'version' => '1.864' | |
178 | 'version' => '1.865' | |
179 | 179 | }, |
180 | 180 | 'MCE::Subs' => { |
181 | 181 | 'file' => 'lib/MCE/Subs.pm', |
182 | 'version' => '1.864' | |
182 | 'version' => '1.865' | |
183 | 183 | }, |
184 | 184 | 'MCE::Util' => { |
185 | 185 | 'file' => 'lib/MCE/Util.pm', |
186 | 'version' => '1.864' | |
186 | 'version' => '1.865' | |
187 | 187 | } |
188 | 188 | }, |
189 | 189 | 'prereqs' => { |
0 | 0 | ## Many-Core Engine for Perl |
1 | 1 | |
2 | This document describes MCE version 1.864. | |
2 | This document describes MCE version 1.865. | |
3 | 3 | |
4 | 4 | Many-Core Engine (MCE) for Perl helps enable a new level of performance by |
5 | 5 | maximizing all available cores. |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | our @CARP_NOT = qw( MCE ); |
16 | 16 | |
239 | 239 | |
240 | 240 | =head1 VERSION |
241 | 241 | |
242 | This document describes MCE::Candy version 1.864 | |
242 | This document describes MCE::Candy version 1.865 | |
243 | 243 | |
244 | 244 | =head1 DESCRIPTION |
245 | 245 |
10 | 10 | |
11 | 11 | no warnings qw( uninitialized once ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | use base 'MCE::Channel'; |
16 | 16 | use MCE::Mutex (); |
17 | 17 | use bytes; |
18 | 18 | |
19 | 19 | my $LF = "\012"; Internals::SvREADONLY($LF, 1); |
20 | my $is_MSWin32 = ( $^O eq 'MSWin32' ) ? 1 : 0; | |
21 | 20 | my $freeze = MCE::Channel::_get_freeze(); |
22 | 21 | my $thaw = MCE::Channel::_get_thaw(); |
23 | 22 | |
52 | 51 | return if $self->{ended}; |
53 | 52 | |
54 | 53 | local $\ = undef if (defined $\); |
55 | MCE::Util::_sock_ready_w( $self->{p_sock} ) if $is_MSWin32; | |
56 | 54 | print { $self->{p_sock} } pack('i', -1); |
57 | 55 | |
58 | 56 | $self->{ended} = 1; |
65 | 63 | local $\ = undef if (defined $\); |
66 | 64 | my $p_mutex = $self->{p_mutex}; |
67 | 65 | $p_mutex->lock2 if $p_mutex; |
68 | ||
69 | MCE::Util::_sock_ready_w( $self->{p_sock} ) if $is_MSWin32; | |
70 | 66 | |
71 | 67 | while ( @_ ) { |
72 | 68 | my $data; |
89 | 85 | |
90 | 86 | if ( $count == 1 ) { |
91 | 87 | ( my $c_mutex = $self->{c_mutex} )->lock; |
92 | MCE::Util::_sock_ready( $self->{c_sock} ) if $is_MSWin32; | |
93 | 88 | MCE::Util::_sysread( $self->{c_sock}, my($plen), 4 ); |
94 | 89 | |
95 | 90 | my $len = unpack('i', $plen); |
109 | 104 | my ( $plen, @ret ); |
110 | 105 | |
111 | 106 | ( my $c_mutex = $self->{c_mutex} )->lock; |
112 | MCE::Util::_sock_ready( $self->{c_sock} ) if $is_MSWin32; | |
113 | 107 | |
114 | 108 | while ( $count-- ) { |
115 | 109 | MCE::Util::_sysread( $self->{c_sock}, $plen, 4 ); |
178 | 172 | my $p_mutex = $self->{p_mutex}; |
179 | 173 | $p_mutex->lock2 if $p_mutex; |
180 | 174 | |
181 | MCE::Util::_sock_ready_w( $self->{p_sock} ) if $is_MSWin32; | |
182 | 175 | print { $self->{p_sock} } pack('i', length $data), $data; |
183 | 176 | $p_mutex->unlock2 if $p_mutex; |
184 | 177 | |
189 | 182 | my ( $self ) = @_; |
190 | 183 | |
191 | 184 | ( my $c_mutex = $self->{c_mutex} )->lock; |
192 | MCE::Util::_sock_ready( $self->{c_sock} ) if $is_MSWin32; | |
193 | 185 | MCE::Util::_sysread( $self->{c_sock}, my($plen), 4 ); |
194 | 186 | |
195 | 187 | my $len = unpack('i', $plen); |
252 | 244 | local $MCE::Signal::IPC = 1; |
253 | 245 | ( my $c_mutex = $self->{c_mutex} )->lock2; |
254 | 246 | |
255 | MCE::Util::_sock_ready_w( $self->{c_sock} ) if $is_MSWin32; | |
256 | 247 | print { $self->{c_sock} } pack('i', length $data), $data; |
257 | 248 | $c_mutex->unlock2; |
258 | 249 | } |
270 | 261 | my $p_mutex = $self->{p_mutex}; |
271 | 262 | $p_mutex->lock if $p_mutex; |
272 | 263 | |
273 | MCE::Util::_sock_ready( $self->{p_sock} ) if $is_MSWin32; | |
274 | ||
275 | ( $p_mutex || $is_MSWin32 ) | |
264 | ( $p_mutex ) | |
276 | 265 | ? MCE::Util::_sysread( $self->{p_sock}, $plen, 4 ) |
277 | 266 | : read( $self->{p_sock}, $plen, 4 ); |
278 | 267 | |
279 | 268 | my $len = unpack('i', $plen); |
280 | 269 | |
281 | ( $p_mutex || $is_MSWin32 ) | |
270 | ( $p_mutex ) | |
282 | 271 | ? MCE::Channel::_read( $self->{p_sock}, $data, $len ) |
283 | 272 | : read( $self->{p_sock}, $data, $len ); |
284 | 273 | |
299 | 288 | |
300 | 289 | MCE::Util::_nonblocking( $self->{p_sock}, 1 ); |
301 | 290 | |
302 | ( $p_mutex || $is_MSWin32 ) | |
291 | ( $p_mutex ) | |
303 | 292 | ? MCE::Util::_sysread( $self->{p_sock}, $plen, 4 ) |
304 | 293 | : read( $self->{p_sock}, $plen, 4 ); |
305 | 294 | |
311 | 300 | return wantarray ? () : undef; |
312 | 301 | } |
313 | 302 | |
314 | ( $p_mutex || $is_MSWin32 ) | |
303 | ( $p_mutex ) | |
315 | 304 | ? MCE::Channel::_read( $self->{p_sock}, $data, $len ) |
316 | 305 | : read( $self->{p_sock}, $data, $len ); |
317 | 306 | |
338 | 327 | |
339 | 328 | =head1 VERSION |
340 | 329 | |
341 | This document describes MCE::Channel::Mutex version 1.864 | |
330 | This document describes MCE::Channel::Mutex version 1.865 | |
342 | 331 | |
343 | 332 | =head1 DESCRIPTION |
344 | 333 |
10 | 10 | |
11 | 11 | no warnings qw( uninitialized once ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | use base 'MCE::Channel'; |
16 | 16 | use bytes; |
327 | 327 | |
328 | 328 | =head1 VERSION |
329 | 329 | |
330 | This document describes MCE::Channel::Simple version 1.864 | |
330 | This document describes MCE::Channel::Simple version 1.865 | |
331 | 331 | |
332 | 332 | =head1 DESCRIPTION |
333 | 333 |
10 | 10 | |
11 | 11 | no warnings qw( uninitialized once ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | use threads; |
16 | 16 | use threads::shared; |
28 | 28 | |
29 | 29 | $obj{init_pid} = MCE::Channel::_pid(); |
30 | 30 | MCE::Util::_sock_pair( \%obj, 'p_sock', 'c_sock' ); |
31 | MCE::Util::_sock_pair( \%obj, 'p2_sock', 'c2_sock' ) if $is_MSWin32; | |
31 | 32 | |
32 | 33 | # locking for the consumer side of the channel |
33 | 34 | $obj{cr_mutex} = threads::shared::share( my $cr_mutex ); |
254 | 255 | local $MCE::Signal::SIG; |
255 | 256 | |
256 | 257 | { |
258 | my $c_sock = $self->{c2_sock} || $self->{c_sock}; | |
259 | ||
257 | 260 | local $MCE::Signal::IPC = 1; |
258 | 261 | CORE::lock $self->{cw_mutex}; |
259 | 262 | |
260 | MCE::Util::_sock_ready_w( $self->{c_sock} ) if $is_MSWin32; | |
261 | print { $self->{c_sock} } pack('i', length $data), $data; | |
263 | MCE::Util::_sock_ready_w( $c_sock ) if $is_MSWin32; | |
264 | print { $c_sock } pack('i', length $data), $data; | |
262 | 265 | } |
263 | 266 | |
264 | 267 | CORE::kill($MCE::Signal::SIG, $$) if $MCE::Signal::SIG; |
273 | 276 | local $/ = $LF if ( $/ ne $LF ); |
274 | 277 | |
275 | 278 | { |
279 | my $p_sock = $self->{p2_sock} || $self->{p_sock}; | |
276 | 280 | my $pr_mutex = $self->{pr_mutex}; |
281 | ||
277 | 282 | CORE::lock $pr_mutex if $pr_mutex; |
278 | MCE::Util::_sock_ready( $self->{p_sock} ) if $is_MSWin32; | |
283 | MCE::Util::_sock_ready( $p_sock ) if $is_MSWin32; | |
279 | 284 | |
280 | 285 | ( $pr_mutex || $is_MSWin32 ) |
281 | ? MCE::Util::_sysread( $self->{p_sock}, $plen, 4 ) | |
282 | : read( $self->{p_sock}, $plen, 4 ); | |
286 | ? MCE::Util::_sysread( $p_sock, $plen, 4 ) | |
287 | : read( $p_sock, $plen, 4 ); | |
283 | 288 | |
284 | 289 | my $len = unpack('i', $plen); |
285 | 290 | |
286 | 291 | ( $pr_mutex || $is_MSWin32 ) |
287 | ? MCE::Channel::_read( $self->{p_sock}, $data, $len ) | |
288 | : read( $self->{p_sock}, $data, $len ); | |
292 | ? MCE::Channel::_read( $p_sock, $data, $len ) | |
293 | : read( $p_sock, $data, $len ); | |
289 | 294 | } |
290 | 295 | |
291 | 296 | chop( $data ) |
300 | 305 | local $/ = $LF if ( $/ ne $LF ); |
301 | 306 | |
302 | 307 | { |
308 | my $p_sock = $self->{p2_sock} || $self->{p_sock}; | |
303 | 309 | my $pr_mutex = $self->{pr_mutex}; |
310 | ||
304 | 311 | CORE::lock $pr_mutex if $pr_mutex; |
305 | MCE::Util::_nonblocking( $self->{p_sock}, 1 ); | |
312 | MCE::Util::_nonblocking( $p_sock, 1 ); | |
306 | 313 | |
307 | 314 | ( $pr_mutex || $is_MSWin32 ) |
308 | ? MCE::Util::_sysread( $self->{p_sock}, $plen, 4 ) | |
309 | : read( $self->{p_sock}, $plen, 4 ); | |
310 | ||
311 | MCE::Util::_nonblocking( $self->{p_sock}, 0 ); | |
315 | ? MCE::Util::_sysread( $p_sock, $plen, 4 ) | |
316 | : read( $p_sock, $plen, 4 ); | |
317 | ||
318 | MCE::Util::_nonblocking( $p_sock, 0 ); | |
312 | 319 | |
313 | 320 | my $len; $len = unpack('i', $plen) if $plen; |
314 | 321 | |
315 | 322 | return wantarray ? () : undef unless $len; |
316 | 323 | |
317 | 324 | ( $pr_mutex || $is_MSWin32 ) |
318 | ? MCE::Channel::_read( $self->{p_sock}, $data, $len ) | |
319 | : read( $self->{p_sock}, $data, $len ); | |
325 | ? MCE::Channel::_read( $p_sock, $data, $len ) | |
326 | : read( $p_sock, $data, $len ); | |
320 | 327 | } |
321 | 328 | |
322 | 329 | chop( $data ) |
340 | 347 | |
341 | 348 | =head1 VERSION |
342 | 349 | |
343 | This document describes MCE::Channel::Threads version 1.864 | |
350 | This document describes MCE::Channel::Threads version 1.865 | |
344 | 351 | |
345 | 352 | =head1 DESCRIPTION |
346 | 353 |
10 | 10 | |
11 | 11 | no warnings qw( uninitialized once ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | ## no critic (BuiltinFunctions::ProhibitStringyEval) |
16 | 16 | ## no critic (TestingAndDebugging::ProhibitNoStrict) |
75 | 75 | my ( $pid, $self ) = ( $tid ? $$ .'.'. $tid : $$, @_ ); |
76 | 76 | |
77 | 77 | if ( $self->{'init_pid'} && $self->{'init_pid'} eq $pid ) { |
78 | MCE::Util::_destroy_socks( $self, qw(c_sock p_sock) ); | |
78 | MCE::Util::_destroy_socks($self, qw(c_sock c2_sock p_sock p2_sock)); | |
79 | 79 | delete($self->{c_mutex}), delete($self->{p_mutex}); |
80 | 80 | } |
81 | 81 | |
127 | 127 | |
128 | 128 | =head1 VERSION |
129 | 129 | |
130 | This document describes MCE::Channel version 1.864 | |
130 | This document describes MCE::Channel version 1.865 | |
131 | 131 | |
132 | 132 | =head1 SYNOPSIS |
133 | 133 | |
211 | 211 | |
212 | 212 | =head2 new ( impl => STRING, mp => BOOLEAN ) |
213 | 213 | |
214 | This creates a new channel. Three implementations are provided C<Mutex> (default), | |
215 | C<Threads>, and C<Simple> indicating the locking mechanism to use C<MCE::Mutex>, | |
216 | C<threads::shared>, and no locking respectively. | |
214 | This creates a new channel. Three implementations are provided C<Mutex>, | |
215 | C<Threads>, and C<Simple> indicating the locking mechanism to use | |
216 | C<MCE::Mutex>, C<threads::shared>, and no locking respectively. | |
217 | 217 | |
218 | 218 | $chnl = MCE::Channel->new(); # default: impl => 'Mutex', mp => 0 |
219 | ||
220 | The C<Mutex> channel implementation supports processes and threads whereas the | |
221 | C<Threads> channel implementation is suited for threads only. | |
219 | # default: impl => 'Threads' on Windows | |
220 | ||
221 | The C<Mutex> implementation supports processes and threads whereas the | |
222 | C<Threads> implementation is suited for Windows and threads only. | |
222 | 223 | |
223 | 224 | $chnl = MCE::Channel->new( impl => 'Mutex' ); # MCE::Mutex locking |
224 | 225 | $chnl = MCE::Channel->new( impl => 'Threads' ); # threads::shared locking |
226 | ||
227 | # on Windows, silently becomes impl => 'Threads' when specifying 'Mutex' | |
225 | 228 | |
226 | 229 | Set the C<mp> (m)any (p)roducers option to a true value if there will be two |
227 | 230 | or more workers calling C<enqueue>, <send>, C<recv2>, or C<recv2_nb> on the |
229 | 232 | |
230 | 233 | $chnl = MCE::Channel->new( impl => 'Mutex', mp => 1 ); |
231 | 234 | $chnl = MCE::Channel->new( impl => 'Threads', mp => 1 ); |
235 | ||
236 | # on Windows, silently becomes impl => 'Threads' when specifying 'Mutex' | |
232 | 237 | |
233 | 238 | The C<Simple> implementation is optimized for one producer and one consumer max. |
234 | 239 | It omits locking for maximum performance. This implementation is preferred for |
10 | 10 | |
11 | 11 | package MCE::Child; |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | ## no critic (BuiltinFunctions::ProhibitStringyEval) |
16 | 16 | ## no critic (Subroutines::ProhibitExplicitReturnUndef) |
971 | 971 | |
972 | 972 | =head1 VERSION |
973 | 973 | |
974 | This document describes MCE::Child version 1.864 | |
974 | This document describes MCE::Child version 1.865 | |
975 | 975 | |
976 | 976 | =head1 SYNOPSIS |
977 | 977 | |
1564 | 1564 | A demonstration is provided in the next section for fetching URLs in parallel. |
1565 | 1565 | |
1566 | 1566 | The default C<floating_seconds> is 0.008 and 0.015 on UNIX and Windows, |
1567 | respectively. Pass 0 if you want to give other workers a chance to run. | |
1567 | respectively. Pass 0 if simply wanting to give other workers a chance to run. | |
1568 | 1568 | |
1569 | 1569 | # total run time: 1.00 second |
1570 | 1570 |
14 | 14 | use strict; |
15 | 15 | use warnings; |
16 | 16 | |
17 | our $VERSION = '1.864'; | |
17 | our $VERSION = '1.865'; | |
18 | 18 | |
19 | 19 | ## Items below are folded into MCE. |
20 | 20 | |
219 | 219 | |
220 | 220 | =head1 VERSION |
221 | 221 | |
222 | This document describes MCE::Core::Input::Generator version 1.864 | |
222 | This document describes MCE::Core::Input::Generator version 1.865 | |
223 | 223 | |
224 | 224 | =head1 DESCRIPTION |
225 | 225 |
13 | 13 | use strict; |
14 | 14 | use warnings; |
15 | 15 | |
16 | our $VERSION = '1.864'; | |
16 | our $VERSION = '1.865'; | |
17 | 17 | |
18 | 18 | ## Items below are folded into MCE. |
19 | 19 | |
281 | 281 | |
282 | 282 | =head1 VERSION |
283 | 283 | |
284 | This document describes MCE::Core::Input::Handle version 1.864 | |
284 | This document describes MCE::Core::Input::Handle version 1.865 | |
285 | 285 | |
286 | 286 | =head1 DESCRIPTION |
287 | 287 |
13 | 13 | use strict; |
14 | 14 | use warnings; |
15 | 15 | |
16 | our $VERSION = '1.864'; | |
16 | our $VERSION = '1.865'; | |
17 | 17 | |
18 | 18 | ## Items below are folded into MCE. |
19 | 19 | |
136 | 136 | |
137 | 137 | =head1 VERSION |
138 | 138 | |
139 | This document describes MCE::Core::Input::Iterator version 1.864 | |
139 | This document describes MCE::Core::Input::Iterator version 1.865 | |
140 | 140 | |
141 | 141 | =head1 DESCRIPTION |
142 | 142 |
13 | 13 | use strict; |
14 | 14 | use warnings; |
15 | 15 | |
16 | our $VERSION = '1.864'; | |
16 | our $VERSION = '1.865'; | |
17 | 17 | |
18 | 18 | ## Items below are folded into MCE. |
19 | 19 | |
205 | 205 | |
206 | 206 | =head1 VERSION |
207 | 207 | |
208 | This document describes MCE::Core::Input::Request version 1.864 | |
208 | This document describes MCE::Core::Input::Request version 1.865 | |
209 | 209 | |
210 | 210 | =head1 DESCRIPTION |
211 | 211 |
13 | 13 | use strict; |
14 | 14 | use warnings; |
15 | 15 | |
16 | our $VERSION = '1.864'; | |
16 | our $VERSION = '1.865'; | |
17 | 17 | |
18 | 18 | ## Items below are folded into MCE. |
19 | 19 | |
230 | 230 | |
231 | 231 | =head1 VERSION |
232 | 232 | |
233 | This document describes MCE::Core::Input::Sequence version 1.864 | |
233 | This document describes MCE::Core::Input::Sequence version 1.865 | |
234 | 234 | |
235 | 235 | =head1 DESCRIPTION |
236 | 236 |
13 | 13 | use strict; |
14 | 14 | use warnings; |
15 | 15 | |
16 | our $VERSION = '1.864'; | |
16 | our $VERSION = '1.865'; | |
17 | 17 | |
18 | 18 | ## no critic (BuiltinFunctions::ProhibitStringyEval) |
19 | 19 | ## no critic (TestingAndDebugging::ProhibitNoStrict) |
1040 | 1040 | |
1041 | 1041 | =head1 VERSION |
1042 | 1042 | |
1043 | This document describes MCE::Core::Manager version 1.864 | |
1043 | This document describes MCE::Core::Manager version 1.865 | |
1044 | 1044 | |
1045 | 1045 | =head1 DESCRIPTION |
1046 | 1046 |
13 | 13 | use strict; |
14 | 14 | use warnings; |
15 | 15 | |
16 | our $VERSION = '1.864'; | |
16 | our $VERSION = '1.865'; | |
17 | 17 | |
18 | 18 | ## Items below are folded into MCE. |
19 | 19 | |
390 | 390 | |
391 | 391 | =head1 VERSION |
392 | 392 | |
393 | This document describes MCE::Core::Validation version 1.864 | |
393 | This document describes MCE::Core::Validation version 1.865 | |
394 | 394 | |
395 | 395 | =head1 DESCRIPTION |
396 | 396 |
13 | 13 | use strict; |
14 | 14 | use warnings; |
15 | 15 | |
16 | our $VERSION = '1.864'; | |
16 | our $VERSION = '1.865'; | |
17 | 17 | |
18 | 18 | my $_tid = $INC{'threads.pm'} ? threads->tid() : 0; |
19 | 19 | |
743 | 743 | |
744 | 744 | =head1 VERSION |
745 | 745 | |
746 | This document describes MCE::Core::Worker version 1.864 | |
746 | This document describes MCE::Core::Worker version 1.865 | |
747 | 747 | |
748 | 748 | =head1 DESCRIPTION |
749 | 749 |
4 | 4 | |
5 | 5 | =head1 VERSION |
6 | 6 | |
7 | This document describes MCE::Core version 1.864 | |
7 | This document describes MCE::Core version 1.865 | |
8 | 8 | |
9 | 9 | =head1 SYNOPSIS |
10 | 10 |
4 | 4 | |
5 | 5 | =head1 VERSION |
6 | 6 | |
7 | This document describes MCE::Examples version 1.864 | |
7 | This document describes MCE::Examples version 1.865 | |
8 | 8 | |
9 | 9 | =head1 INCLUDED WITH THE DISTRIBUTION |
10 | 10 |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | ## no critic (BuiltinFunctions::ProhibitStringyEval) |
16 | 16 | ## no critic (Subroutines::ProhibitSubroutinePrototypes) |
478 | 478 | |
479 | 479 | =head1 VERSION |
480 | 480 | |
481 | This document describes MCE::Flow version 1.864 | |
481 | This document describes MCE::Flow version 1.865 | |
482 | 482 | |
483 | 483 | =head1 DESCRIPTION |
484 | 484 |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | ## no critic (BuiltinFunctions::ProhibitStringyEval) |
16 | 16 | ## no critic (Subroutines::ProhibitSubroutinePrototypes) |
433 | 433 | |
434 | 434 | =head1 VERSION |
435 | 435 | |
436 | This document describes MCE::Grep version 1.864 | |
436 | This document describes MCE::Grep version 1.865 | |
437 | 437 | |
438 | 438 | =head1 SYNOPSIS |
439 | 439 |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | ## no critic (BuiltinFunctions::ProhibitStringyEval) |
16 | 16 | ## no critic (Subroutines::ProhibitSubroutinePrototypes) |
348 | 348 | |
349 | 349 | =head1 VERSION |
350 | 350 | |
351 | This document describes MCE::Loop version 1.864 | |
351 | This document describes MCE::Loop version 1.865 | |
352 | 352 | |
353 | 353 | =head1 DESCRIPTION |
354 | 354 |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | ## no critic (BuiltinFunctions::ProhibitStringyEval) |
16 | 16 | ## no critic (Subroutines::ProhibitSubroutinePrototypes) |
433 | 433 | |
434 | 434 | =head1 VERSION |
435 | 435 | |
436 | This document describes MCE::Map version 1.864 | |
436 | This document describes MCE::Map version 1.865 | |
437 | 437 | |
438 | 438 | =head1 SYNOPSIS |
439 | 439 |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized once ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | use base 'MCE::Mutex'; |
16 | 16 | use Scalar::Util qw(refaddr weaken); |
138 | 138 | |
139 | 139 | =head1 VERSION |
140 | 140 | |
141 | This document describes MCE::Mutex::Channel version 1.864 | |
141 | This document describes MCE::Mutex::Channel version 1.865 | |
142 | 142 | |
143 | 143 | =head1 DESCRIPTION |
144 | 144 |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized once ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | use base 'MCE::Mutex::Channel'; |
16 | 16 | use MCE::Util (); |
113 | 113 | |
114 | 114 | =head1 VERSION |
115 | 115 | |
116 | This document describes MCE::Mutex::Channel2 version 1.864 | |
116 | This document describes MCE::Mutex::Channel2 version 1.865 | |
117 | 117 | |
118 | 118 | =head1 DESCRIPTION |
119 | 119 |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized once ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | use base 'MCE::Mutex'; |
16 | 16 | use Fcntl ':flock'; |
180 | 180 | |
181 | 181 | =head1 VERSION |
182 | 182 | |
183 | This document describes MCE::Mutex::Flock version 1.864 | |
183 | This document describes MCE::Mutex::Flock version 1.865 | |
184 | 184 | |
185 | 185 | =head1 DESCRIPTION |
186 | 186 |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | ## no critic (BuiltinFunctions::ProhibitStringyEval) |
16 | 16 | ## no critic (TestingAndDebugging::ProhibitNoStrict) |
75 | 75 | |
76 | 76 | =head1 VERSION |
77 | 77 | |
78 | This document describes MCE::Mutex version 1.864 | |
78 | This document describes MCE::Mutex version 1.865 | |
79 | 79 | |
80 | 80 | =head1 SYNOPSIS |
81 | 81 |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | ## no critic (Subroutines::ProhibitExplicitReturnUndef) |
16 | 16 | ## no critic (TestingAndDebugging::ProhibitNoStrict) |
1600 | 1600 | |
1601 | 1601 | =head1 VERSION |
1602 | 1602 | |
1603 | This document describes MCE::Queue version 1.864 | |
1603 | This document describes MCE::Queue version 1.865 | |
1604 | 1604 | |
1605 | 1605 | =head1 SYNOPSIS |
1606 | 1606 |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized numeric ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | ## no critic (Subroutines::ProhibitSubroutinePrototypes) |
16 | 16 | |
369 | 369 | |
370 | 370 | =head1 VERSION |
371 | 371 | |
372 | This document describes MCE::Relay version 1.864 | |
372 | This document describes MCE::Relay version 1.865 | |
373 | 373 | |
374 | 374 | =head1 SYNOPSIS |
375 | 375 |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized once ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | ## no critic (BuiltinFunctions::ProhibitStringyEval) |
16 | 16 | |
205 | 205 | $SIG{__DIE__} = $SIG{__WARN__} = sub {}; |
206 | 206 | |
207 | 207 | if (exists $_sig_name_lkup{$_sig_name}) { |
208 | $_exit_status = $MCE::Signal::KILLED = $_is_sig = 1; | |
209 | $_exit_status = 255, $_sig_name = 'TERM' if ($_sig_name eq '__DIE__'); | |
210 | $_exit_status = 0 if ($_sig_name eq 'PIPE'); | |
208 | 211 | $SIG{INT} = $SIG{$_sig_name} = sub {}; |
209 | $_exit_status = $MCE::Signal::KILLED = $_is_sig = 1; | |
210 | $_exit_status = 255 if ($_sig_name eq '__DIE__'); | |
211 | $_exit_status = 0 if ($_sig_name eq 'PIPE'); | |
212 | 212 | } |
213 | 213 | else { |
214 | 214 | $_exit_status = $_sig_name if ($_sig_name =~ /^\d+$/); |
437 | 437 | |
438 | 438 | =head1 VERSION |
439 | 439 | |
440 | This document describes MCE::Signal version 1.864 | |
440 | This document describes MCE::Signal version 1.865 | |
441 | 441 | |
442 | 442 | =head1 SYNOPSIS |
443 | 443 |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | ## no critic (BuiltinFunctions::ProhibitStringyEval) |
16 | 16 | ## no critic (Subroutines::ProhibitSubroutinePrototypes) |
714 | 714 | |
715 | 715 | =head1 VERSION |
716 | 716 | |
717 | This document describes MCE::Step version 1.864 | |
717 | This document describes MCE::Step version 1.865 | |
718 | 718 | |
719 | 719 | =head1 DESCRIPTION |
720 | 720 |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | ## no critic (BuiltinFunctions::ProhibitStringyEval) |
16 | 16 | ## no critic (Subroutines::ProhibitSubroutinePrototypes) |
670 | 670 | |
671 | 671 | =head1 VERSION |
672 | 672 | |
673 | This document describes MCE::Stream version 1.864 | |
673 | This document describes MCE::Stream version 1.865 | |
674 | 674 | |
675 | 675 | =head1 SYNOPSIS |
676 | 676 |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | ## no critic (Subroutines::ProhibitSubroutinePrototypes) |
16 | 16 | ## no critic (TestingAndDebugging::ProhibitNoStrict) |
203 | 203 | |
204 | 204 | =head1 VERSION |
205 | 205 | |
206 | This document describes MCE::Subs version 1.864 | |
206 | This document describes MCE::Subs version 1.865 | |
207 | 207 | |
208 | 208 | =head1 SYNOPSIS |
209 | 209 |
10 | 10 | |
11 | 11 | no warnings qw( threads recursion uninitialized numeric ); |
12 | 12 | |
13 | our $VERSION = '1.864'; | |
13 | our $VERSION = '1.865'; | |
14 | 14 | |
15 | 15 | ## no critic (BuiltinFunctions::ProhibitStringyEval) |
16 | 16 | |
409 | 409 | |
410 | 410 | =head1 VERSION |
411 | 411 | |
412 | This document describes MCE::Util version 1.864 | |
412 | This document describes MCE::Util version 1.865 | |
413 | 413 | |
414 | 414 | =head1 SYNOPSIS |
415 | 415 |