async 1.28.9 → 1.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/async/debug/monitor.rb +8 -10
- data/lib/async/debug/selector.rb +8 -15
- data/lib/async/reactor.rb +6 -11
- data/lib/async/task.rb +7 -9
- data/lib/async/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 421b9e871d367ee3c769c4f7a9f3e51125d5e11c45d37f9d8c562a33ecce70ed
|
4
|
+
data.tar.gz: 868be7ef14d83fb04620c862d69b38e03f0b5ba036cd2d65e6caf0f45c58a689
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 47620eaf32dc53e1978f3c07ef66823c6aa4b3e85ec23ac3a207d1cdb39a06c790428a9b67dc3b955b74edf723faa567b2f8a077893ecf0c3d1383c5c62997e0
|
7
|
+
data.tar.gz: 74e3b0e17cc0d8f63bdc2c7e4aa40033062a07d2a5a1866f3ca3ac072376264463f8b11203485a07bbed11c475cbad6a2ac81f9297e900a732263f8b7b0b401b
|
data/lib/async/debug/monitor.rb
CHANGED
@@ -20,25 +20,23 @@
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
21
|
# THE SOFTWARE.
|
22
22
|
|
23
|
+
require 'delegate'
|
24
|
+
|
23
25
|
module Async
|
24
26
|
module Debug
|
25
|
-
class Monitor
|
27
|
+
class Monitor < Delegator
|
26
28
|
def initialize(monitor, selector)
|
27
29
|
@monitor = monitor
|
28
30
|
@selector = selector
|
29
31
|
end
|
30
32
|
|
31
|
-
def
|
32
|
-
@
|
33
|
-
@monitor.close
|
33
|
+
def __getobj__
|
34
|
+
@monitor
|
34
35
|
end
|
35
36
|
|
36
|
-
def
|
37
|
-
@
|
38
|
-
|
39
|
-
|
40
|
-
def respond_to?(*arguments)
|
41
|
-
@monitor.respond_to?(*arguments)
|
37
|
+
def close
|
38
|
+
@selector.deregister(self)
|
39
|
+
@monitor.close
|
42
40
|
end
|
43
41
|
|
44
42
|
def inspect
|
data/lib/async/debug/selector.rb
CHANGED
@@ -24,6 +24,7 @@ require_relative 'monitor'
|
|
24
24
|
require_relative '../logger'
|
25
25
|
|
26
26
|
require 'nio'
|
27
|
+
require 'set'
|
27
28
|
|
28
29
|
module Async
|
29
30
|
module Debug
|
@@ -36,7 +37,7 @@ module Async
|
|
36
37
|
class Selector
|
37
38
|
def initialize(selector = NIO::Selector.new)
|
38
39
|
@selector = selector
|
39
|
-
@monitors =
|
40
|
+
@monitors = Set.new
|
40
41
|
end
|
41
42
|
|
42
43
|
def register(object, interests)
|
@@ -46,26 +47,18 @@ module Async
|
|
46
47
|
raise RuntimeError, "Could not convert #{io} into IO!"
|
47
48
|
end
|
48
49
|
|
49
|
-
if monitor = @monitors[io.fileno]
|
50
|
-
raise RuntimeError, "Trying to register monitor for #{object.inspect} but it was already registered: #{monitor.inspect}!"
|
51
|
-
end
|
52
|
-
|
53
50
|
monitor = Monitor.new(@selector.register(object, interests), self)
|
54
51
|
|
55
|
-
@monitors
|
52
|
+
@monitors.add(monitor)
|
56
53
|
|
57
54
|
return monitor
|
58
55
|
end
|
59
56
|
|
60
|
-
def deregister(
|
61
|
-
Async.logger.debug(self) {"Deregistering #{
|
62
|
-
|
63
|
-
unless io = ::IO.try_convert(object)
|
64
|
-
raise RuntimeError, "Could not convert #{io} into IO!"
|
65
|
-
end
|
57
|
+
def deregister(monitor)
|
58
|
+
Async.logger.debug(self) {"Deregistering #{monitor.inspect}."}
|
66
59
|
|
67
|
-
unless @monitors.delete(
|
68
|
-
raise RuntimeError, "Trying to remove monitor for #{
|
60
|
+
unless @monitors.delete?(monitor)
|
61
|
+
raise RuntimeError, "Trying to remove monitor for #{monitor.inspect} but it was not registered!"
|
69
62
|
end
|
70
63
|
end
|
71
64
|
|
@@ -75,7 +68,7 @@ module Async
|
|
75
68
|
|
76
69
|
def close
|
77
70
|
if @monitors.any?
|
78
|
-
raise LeakError, @monitors
|
71
|
+
raise LeakError, @monitors
|
79
72
|
end
|
80
73
|
ensure
|
81
74
|
@selector.close
|
data/lib/async/reactor.rb
CHANGED
@@ -47,9 +47,7 @@ module Async
|
|
47
47
|
# running.
|
48
48
|
def self.run(*arguments, **options, &block)
|
49
49
|
if current = Task.current?
|
50
|
-
|
51
|
-
|
52
|
-
return reactor.async(*arguments, **options, &block)
|
50
|
+
return current.async(*arguments, **options, &block)
|
53
51
|
else
|
54
52
|
reactor = self.new
|
55
53
|
|
@@ -96,6 +94,7 @@ module Async
|
|
96
94
|
end
|
97
95
|
|
98
96
|
attr :scheduler
|
97
|
+
attr :logger
|
99
98
|
|
100
99
|
# @reentrant Not thread safe.
|
101
100
|
def block(blocker, timeout)
|
@@ -135,10 +134,6 @@ module Async
|
|
135
134
|
end
|
136
135
|
end
|
137
136
|
|
138
|
-
def logger
|
139
|
-
@logger || Console.logger
|
140
|
-
end
|
141
|
-
|
142
137
|
def to_s
|
143
138
|
"\#<#{self.description} #{@children&.size || 0} children (#{stopped? ? 'stopped' : 'running'})>"
|
144
139
|
end
|
@@ -167,7 +162,7 @@ module Async
|
|
167
162
|
# - Avoid scheduler overhead if no blocking operation is performed.
|
168
163
|
task.run(*arguments)
|
169
164
|
|
170
|
-
# logger.debug "Initial execution of task #{fiber} complete (#{result} -> #{fiber.alive?})..."
|
165
|
+
# Console.logger.debug "Initial execution of task #{fiber} complete (#{result} -> #{fiber.alive?})..."
|
171
166
|
return task
|
172
167
|
end
|
173
168
|
|
@@ -210,7 +205,7 @@ module Async
|
|
210
205
|
# @param timeout [Float | nil] the maximum timeout, or if nil, indefinite.
|
211
206
|
# @return [Boolean] whether there is more work to do.
|
212
207
|
def run_once(timeout = nil)
|
213
|
-
# logger.debug(self) {"@ready = #{@ready} @running = #{@running}"}
|
208
|
+
# Console.logger.debug(self) {"@ready = #{@ready} @running = #{@running}"}
|
214
209
|
|
215
210
|
if @ready.any?
|
216
211
|
# running used to correctly answer on `finished?`, and to reuse Array object.
|
@@ -258,7 +253,7 @@ module Async
|
|
258
253
|
interval = timeout
|
259
254
|
end
|
260
255
|
|
261
|
-
# logger.info(self) {"Selecting with #{@children&.size} children with interval = #{interval ? interval.round(2) : 'infinite'}..."}
|
256
|
+
# Console.logger.info(self) {"Selecting with #{@children&.size} children with interval = #{interval ? interval.round(2) : 'infinite'}..."}
|
262
257
|
if monitors = @selector.select(interval)
|
263
258
|
monitors.each do |monitor|
|
264
259
|
monitor.value.resume
|
@@ -295,7 +290,7 @@ module Async
|
|
295
290
|
return initial_task
|
296
291
|
ensure
|
297
292
|
@scheduler&.clear!
|
298
|
-
logger.debug(self) {"Exiting run-loop because #{$! ? $! : 'finished'}."}
|
293
|
+
Console.logger.debug(self) {"Exiting run-loop because #{$! ? $! : 'finished'}."}
|
299
294
|
end
|
300
295
|
|
301
296
|
def stop(later = true)
|
data/lib/async/task.rb
CHANGED
@@ -81,11 +81,13 @@ module Async
|
|
81
81
|
@result = nil
|
82
82
|
@finished = finished
|
83
83
|
|
84
|
-
@logger = logger
|
84
|
+
@logger = logger || @parent.logger
|
85
85
|
|
86
86
|
@fiber = make_fiber(&block)
|
87
87
|
end
|
88
88
|
|
89
|
+
attr :logger
|
90
|
+
|
89
91
|
if Fiber.current.respond_to?(:backtrace)
|
90
92
|
def backtrace(*arguments)
|
91
93
|
@fiber&.backtrace(*arguments)
|
@@ -96,10 +98,6 @@ module Async
|
|
96
98
|
"\#<#{self.description} (#{@status})>"
|
97
99
|
end
|
98
100
|
|
99
|
-
def logger
|
100
|
-
@logger || Console.logger
|
101
|
-
end
|
102
|
-
|
103
101
|
# @attr ios [Reactor] The reactor the task was created within.
|
104
102
|
attr :reactor
|
105
103
|
|
@@ -242,9 +240,9 @@ module Async
|
|
242
240
|
raise
|
243
241
|
elsif @finished.nil?
|
244
242
|
# If no one has called wait, we log this as an error:
|
245
|
-
logger.error(self) {$!}
|
243
|
+
Console.logger.error(self) {$!}
|
246
244
|
else
|
247
|
-
logger.debug(self) {$!}
|
245
|
+
Console.logger.debug(self) {$!}
|
248
246
|
end
|
249
247
|
end
|
250
248
|
|
@@ -264,7 +262,7 @@ module Async
|
|
264
262
|
begin
|
265
263
|
@result = yield(self, *arguments)
|
266
264
|
@status = :complete
|
267
|
-
# logger.debug(self) {"Task was completed with #{@children.size} children!"}
|
265
|
+
# Console.logger.debug(self) {"Task was completed with #{@children.size} children!"}
|
268
266
|
rescue Stop
|
269
267
|
stop!
|
270
268
|
rescue StandardError => error
|
@@ -272,7 +270,7 @@ module Async
|
|
272
270
|
rescue Exception => exception
|
273
271
|
fail!(exception, true)
|
274
272
|
ensure
|
275
|
-
# logger.debug(self) {"Task ensure $!=#{$!} with #{@children.size} children!"}
|
273
|
+
# Console.logger.debug(self) {"Task ensure $!=#{$!} with #{@children.size} children!"}
|
276
274
|
finish!
|
277
275
|
end
|
278
276
|
end
|
data/lib/async/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: async
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.29.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: console
|