libuv 2.0.12 → 3.0.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/.gitignore +2 -0
- data/README.md +67 -34
- data/lib/libuv.rb +30 -5
- data/lib/libuv/async.rb +16 -10
- data/lib/libuv/check.rb +19 -12
- data/lib/libuv/coroutines.rb +39 -12
- data/lib/libuv/dns.rb +25 -18
- data/lib/libuv/error.rb +2 -0
- data/lib/libuv/ext/ext.rb +28 -36
- data/lib/libuv/ext/platform/darwin_x64.rb +2 -0
- data/lib/libuv/ext/platform/unix.rb +2 -0
- data/lib/libuv/ext/platform/windows.rb +2 -0
- data/lib/libuv/ext/tasks.rb +2 -0
- data/lib/libuv/ext/tasks/mac.rb +2 -0
- data/lib/libuv/ext/tasks/unix.rb +2 -0
- data/lib/libuv/ext/tasks/win.rb +2 -0
- data/lib/libuv/ext/types.rb +2 -1
- data/lib/libuv/file.rb +67 -50
- data/lib/libuv/filesystem.rb +63 -61
- data/lib/libuv/fs_event.rb +7 -4
- data/lib/libuv/handle.rb +30 -14
- data/lib/libuv/idle.rb +17 -10
- data/lib/libuv/mixins/accessors.rb +41 -0
- data/lib/libuv/mixins/assertions.rb +3 -1
- data/lib/libuv/mixins/fs_checks.rb +29 -6
- data/lib/libuv/mixins/listener.rb +4 -2
- data/lib/libuv/mixins/net.rb +4 -2
- data/lib/libuv/mixins/resource.rb +5 -3
- data/lib/libuv/mixins/stream.rb +128 -35
- data/lib/libuv/pipe.rb +54 -27
- data/lib/libuv/prepare.rb +19 -12
- data/lib/libuv/q.rb +109 -101
- data/lib/libuv/{loop.rb → reactor.rb} +163 -85
- data/lib/libuv/signal.rb +13 -5
- data/lib/libuv/tcp.rb +109 -63
- data/lib/libuv/timer.rb +44 -24
- data/lib/libuv/tty.rb +8 -3
- data/lib/libuv/udp.rb +49 -22
- data/lib/libuv/version.rb +3 -1
- data/lib/libuv/work.rb +14 -10
- data/libuv.gemspec +11 -9
- data/spec/async_spec.rb +13 -13
- data/spec/coroutines_spec.rb +20 -50
- data/spec/defer_spec.rb +182 -311
- data/spec/dns_spec.rb +51 -41
- data/spec/dsl_spec.rb +43 -0
- data/spec/filesystem_spec.rb +65 -87
- data/spec/idle_spec.rb +19 -33
- data/spec/pipe_spec.rb +25 -32
- data/spec/tcp_spec.rb +116 -53
- data/spec/timer_spec.rb +3 -3
- data/spec/udp_spec.rb +16 -17
- data/spec/zen_spec.rb +2 -3
- metadata +37 -30
data/lib/libuv/tty.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Libuv
|
2
4
|
class TTY < Handle
|
3
5
|
include Stream
|
4
6
|
|
5
7
|
|
6
|
-
def initialize(
|
7
|
-
@
|
8
|
+
def initialize(reactor, fileno, readable)
|
9
|
+
@reactor = reactor
|
8
10
|
|
9
11
|
tty_ptr = ::Libuv::Ext.allocate_handle_tty
|
10
|
-
error = check_result(::Libuv::Ext.tty_init(
|
12
|
+
error = check_result(::Libuv::Ext.tty_init(reactor.handle, tty_ptr, fileno, readable ? 1 : 0))
|
11
13
|
|
12
14
|
super(tty_ptr, error)
|
13
15
|
end
|
@@ -15,15 +17,18 @@ module Libuv
|
|
15
17
|
def enable_raw_mode
|
16
18
|
return if @closed
|
17
19
|
check_result ::Libuv::Ext.tty_set_mode(handle, 1)
|
20
|
+
self
|
18
21
|
end
|
19
22
|
|
20
23
|
def disable_raw_mode
|
21
24
|
return if @closed
|
22
25
|
check_result ::Libuv::Ext.tty_set_mode(handle, 0)
|
26
|
+
self
|
23
27
|
end
|
24
28
|
|
25
29
|
def reset_mode
|
26
30
|
::Libuv::Ext.tty_reset_mode
|
31
|
+
self
|
27
32
|
end
|
28
33
|
|
29
34
|
def winsize
|
data/lib/libuv/udp.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'ipaddr'
|
2
4
|
|
3
5
|
|
@@ -11,18 +13,19 @@ module Libuv
|
|
11
13
|
define_callback function: :send_complete, params: [:pointer, :int]
|
12
14
|
|
13
15
|
|
14
|
-
SEND_DATA_ERROR = "data must be a String"
|
15
|
-
TTL_ARGUMENT_ERROR = "ttl must be an Integer"
|
16
|
-
MULTICAST_ARGUMENT_ERROR = "multicast_address must be a String"
|
17
|
-
INTERFACE_ARGUMENT_ERROR = "interface_address must be a String"
|
18
|
-
HANDLE_CLOSED_ERROR = "unable to send as handle closed"
|
16
|
+
SEND_DATA_ERROR = "data must be a String"
|
17
|
+
TTL_ARGUMENT_ERROR = "ttl must be an Integer"
|
18
|
+
MULTICAST_ARGUMENT_ERROR = "multicast_address must be a String"
|
19
|
+
INTERFACE_ARGUMENT_ERROR = "interface_address must be a String"
|
20
|
+
HANDLE_CLOSED_ERROR = "unable to send as handle closed"
|
19
21
|
|
20
22
|
|
21
|
-
def initialize(
|
22
|
-
@
|
23
|
+
def initialize(reactor, progress: nil)
|
24
|
+
@reactor = reactor
|
25
|
+
@progress = progress
|
23
26
|
|
24
27
|
udp_ptr = ::Libuv::Ext.allocate_handle_udp
|
25
|
-
error = check_result(::Libuv::Ext.udp_init(
|
28
|
+
error = check_result(::Libuv::Ext.udp_init(reactor.handle, udp_ptr))
|
26
29
|
@request_refs = {}
|
27
30
|
|
28
31
|
super(udp_ptr, error)
|
@@ -36,12 +39,16 @@ module Libuv
|
|
36
39
|
sockaddr = create_sockaddr(ip, port)
|
37
40
|
error = check_result ::Libuv::Ext.udp_bind(handle, sockaddr, 0)
|
38
41
|
reject(error) if error
|
42
|
+
|
43
|
+
self
|
39
44
|
end
|
40
45
|
|
41
46
|
def open(fd, binding = true, callback = nil, &blk)
|
42
47
|
return if @closed
|
43
48
|
error = check_result UV.udp_open(handle, fd)
|
44
49
|
reject(error) if error
|
50
|
+
|
51
|
+
self
|
45
52
|
end
|
46
53
|
|
47
54
|
def sockname
|
@@ -58,6 +65,7 @@ module Libuv
|
|
58
65
|
|
59
66
|
error = check_result ::Libuv::Ext.udp_set_membership(handle, multicast_address, interface_address, :uv_join_group)
|
60
67
|
reject(error) if error
|
68
|
+
self
|
61
69
|
end
|
62
70
|
|
63
71
|
def leave(multicast_address, interface_address)
|
@@ -67,6 +75,7 @@ module Libuv
|
|
67
75
|
|
68
76
|
error = check_result ::Libuv::Ext.udp_set_membership(handle, multicast_address, interface_address, :uv_leave_group)
|
69
77
|
reject(error) if error
|
78
|
+
self
|
70
79
|
end
|
71
80
|
|
72
81
|
# Starts reading from the handle
|
@@ -75,6 +84,7 @@ module Libuv
|
|
75
84
|
return if @closed
|
76
85
|
error = check_result ::Libuv::Ext.udp_recv_start(handle, callback(:on_allocate), callback(:on_recv))
|
77
86
|
reject(error) if error
|
87
|
+
self
|
78
88
|
end
|
79
89
|
|
80
90
|
# Stops reading from the handle
|
@@ -83,6 +93,7 @@ module Libuv
|
|
83
93
|
return if @closed
|
84
94
|
error = check_result ::Libuv::Ext.udp_recv_stop(handle)
|
85
95
|
reject(error) if error
|
96
|
+
self
|
86
97
|
end
|
87
98
|
|
88
99
|
def try_send(ip, port, data)
|
@@ -108,9 +119,9 @@ module Libuv
|
|
108
119
|
return result
|
109
120
|
end
|
110
121
|
|
111
|
-
def send(ip, port, data)
|
122
|
+
def send(ip, port, data, wait: false)
|
112
123
|
# NOTE:: Similar to stream.rb -> write
|
113
|
-
deferred = @
|
124
|
+
deferred = @reactor.defer
|
114
125
|
if !@closed
|
115
126
|
begin
|
116
127
|
assert_type(String, ip, IP_ARGUMENT_ERROR)
|
@@ -149,18 +160,27 @@ module Libuv
|
|
149
160
|
deferred.reject(RuntimeError.new(HANDLE_CLOSED_ERROR))
|
150
161
|
end
|
151
162
|
deferred.promise
|
163
|
+
|
164
|
+
if wait
|
165
|
+
return deferred.promise if wait == :promise
|
166
|
+
co deferred.promise
|
167
|
+
end
|
168
|
+
|
169
|
+
self
|
152
170
|
end
|
153
171
|
|
154
|
-
def
|
172
|
+
def enable_multicast_reactor
|
155
173
|
return if @closed
|
156
|
-
error = check_result ::Libuv::Ext.
|
174
|
+
error = check_result ::Libuv::Ext.udp_set_multicast_reactor(handle, 1)
|
157
175
|
reject(error) if error
|
176
|
+
self
|
158
177
|
end
|
159
178
|
|
160
|
-
def
|
179
|
+
def disable_multicast_reactor
|
161
180
|
return if @closed
|
162
|
-
error = check_result ::Libuv::Ext.
|
181
|
+
error = check_result ::Libuv::Ext.udp_set_multicast_reactor(handle, 0)
|
163
182
|
reject(error) if error
|
183
|
+
self
|
164
184
|
end
|
165
185
|
|
166
186
|
def multicast_ttl=(ttl)
|
@@ -168,18 +188,21 @@ module Libuv
|
|
168
188
|
assert_type(Integer, ttl, TTL_ARGUMENT_ERROR)
|
169
189
|
error = check_result ::Libuv::Ext.udp_set_multicast_ttl(handle, ttl)
|
170
190
|
reject(error) if error
|
191
|
+
self
|
171
192
|
end
|
172
193
|
|
173
194
|
def enable_broadcast
|
174
195
|
return if @closed
|
175
196
|
error = check_result ::Libuv::Ext.udp_set_broadcast(handle, 1)
|
176
197
|
reject(error) if error
|
198
|
+
self
|
177
199
|
end
|
178
200
|
|
179
201
|
def disable_broadcast
|
180
202
|
return if @closed
|
181
203
|
error = check_result ::Libuv::Ext.udp_set_broadcast(handle, 0)
|
182
204
|
reject(error) if error
|
205
|
+
self
|
183
206
|
end
|
184
207
|
|
185
208
|
def ttl=(ttl)
|
@@ -187,10 +210,12 @@ module Libuv
|
|
187
210
|
assert_type(Integer, ttl, TTL_ARGUMENT_ERROR)
|
188
211
|
error = check_result ::Libuv::Ext.udp_set_ttl(handle, Integer(ttl))
|
189
212
|
reject(error) if error
|
213
|
+
self
|
190
214
|
end
|
191
215
|
|
192
216
|
def progress(callback = nil, &blk)
|
193
217
|
@progress = callback || blk
|
218
|
+
self
|
194
219
|
end
|
195
220
|
|
196
221
|
|
@@ -239,18 +264,20 @@ module Libuv
|
|
239
264
|
e = check_result(nread)
|
240
265
|
|
241
266
|
if e
|
242
|
-
reject(e) # Will call close
|
267
|
+
::Fiber.new { reject(e) }.resume # Will call close
|
243
268
|
elsif nread > 0
|
244
269
|
data = @receive_buff.read_string(nread)
|
245
270
|
unless sockaddr.null?
|
246
271
|
ip, port = get_ip_and_port(sockaddr)
|
247
272
|
end
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
273
|
+
|
274
|
+
::Fiber.new {
|
275
|
+
begin
|
276
|
+
@progress.call data, ip, port, self
|
277
|
+
rescue Exception => e
|
278
|
+
@reactor.log e, 'performing UDP data received callback'
|
279
|
+
end
|
280
|
+
}.resume
|
254
281
|
else
|
255
282
|
::Libuv::Ext.free(@receive_buff)
|
256
283
|
@receive_buff = nil
|
@@ -265,7 +292,7 @@ module Libuv
|
|
265
292
|
::Libuv::Ext.free(req)
|
266
293
|
buffer1.free
|
267
294
|
|
268
|
-
resolve deferred, status
|
295
|
+
::Fiber.new { resolve deferred, status }.resume
|
269
296
|
end
|
270
297
|
end
|
271
298
|
end
|
data/lib/libuv/version.rb
CHANGED
data/lib/libuv/work.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Libuv
|
2
4
|
class Work < Q::DeferredPromise
|
3
5
|
include Resource, Listener
|
@@ -11,7 +13,7 @@ module Libuv
|
|
11
13
|
define_callback function: :on_complete, params: [:pointer, :int]
|
12
14
|
|
13
15
|
|
14
|
-
# @param thread [::Libuv::
|
16
|
+
# @param thread [::Libuv::Reactor] thread this work request will be associated
|
15
17
|
# @param work [Proc] callback to be called in the thread pool
|
16
18
|
def initialize(thread, work)
|
17
19
|
super(thread, thread.defer)
|
@@ -23,7 +25,7 @@ module Libuv
|
|
23
25
|
|
24
26
|
@instance_id = @pointer.address
|
25
27
|
|
26
|
-
error = check_result ::Libuv::Ext.queue_work(@
|
28
|
+
error = check_result ::Libuv::Ext.queue_work(@reactor, @pointer, callback(:on_work), callback(:on_complete))
|
27
29
|
if error
|
28
30
|
::Libuv::Ext.free(@pointer)
|
29
31
|
@complete = true
|
@@ -56,16 +58,18 @@ module Libuv
|
|
56
58
|
@complete = true
|
57
59
|
::Libuv::Ext.free(req)
|
58
60
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
if @error
|
64
|
-
@defer.reject(@error)
|
61
|
+
::Fiber.new {
|
62
|
+
e = check_result(status)
|
63
|
+
if e
|
64
|
+
@defer.reject(e)
|
65
65
|
else
|
66
|
-
@
|
66
|
+
if @error
|
67
|
+
@defer.reject(@error)
|
68
|
+
else
|
69
|
+
@defer.resolve(@result)
|
70
|
+
end
|
67
71
|
end
|
68
|
-
|
72
|
+
}.resume
|
69
73
|
|
70
74
|
# Clean up references
|
71
75
|
cleanup_callbacks @instance_id
|
data/libuv.gemspec
CHANGED
@@ -1,27 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require File.expand_path("../lib/libuv/version", __FILE__)
|
2
4
|
|
3
5
|
Gem::Specification.new do |gem|
|
4
6
|
gem.name = "libuv"
|
5
7
|
gem.version = Libuv::VERSION
|
6
8
|
gem.license = 'MIT'
|
7
|
-
gem.authors = ["
|
8
|
-
gem.email = ["
|
9
|
+
gem.authors = ["Stephen von Takach"]
|
10
|
+
gem.email = ["steve@cotag.me"]
|
9
11
|
gem.homepage = "https://github.com/cotag/libuv"
|
10
12
|
gem.summary = "libuv bindings for Ruby"
|
11
13
|
gem.description = "An opinionated wrapper around libuv for Ruby"
|
12
14
|
|
13
15
|
gem.extensions << "ext/Rakefile"
|
14
16
|
|
15
|
-
gem.required_ruby_version = '>=
|
17
|
+
gem.required_ruby_version = '>= 2.0.0'
|
16
18
|
gem.require_paths = ["lib"]
|
17
19
|
|
18
|
-
gem.add_runtime_dependency 'ffi', '
|
19
|
-
gem.add_runtime_dependency '
|
20
|
-
gem.add_runtime_dependency 'ruby-tls', '
|
20
|
+
gem.add_runtime_dependency 'ffi', '~> 1.9'
|
21
|
+
gem.add_runtime_dependency 'concurrent-ruby', '~> 1.0'
|
22
|
+
gem.add_runtime_dependency 'ruby-tls', '~> 2.1'
|
21
23
|
|
22
|
-
gem.add_development_dependency 'rspec', '
|
23
|
-
gem.add_development_dependency 'rake', '
|
24
|
-
gem.add_development_dependency 'yard'
|
24
|
+
gem.add_development_dependency 'rspec', '~> 3.5'
|
25
|
+
gem.add_development_dependency 'rake', '~> 11.2'
|
26
|
+
gem.add_development_dependency 'yard', '~> 0.9'
|
25
27
|
|
26
28
|
gem.files = `git ls-files`.split("\n")
|
27
29
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/spec/async_spec.rb
CHANGED
@@ -6,25 +6,25 @@ describe Libuv::Async do
|
|
6
6
|
@log = []
|
7
7
|
@general_failure = []
|
8
8
|
|
9
|
-
@
|
10
|
-
@call = @
|
11
|
-
@timeout = @
|
12
|
-
@
|
9
|
+
@reactor = Libuv::Reactor.default
|
10
|
+
@call = @reactor.pipe
|
11
|
+
@timeout = @reactor.timer do
|
12
|
+
@reactor.stop
|
13
13
|
@general_failure << "test timed out"
|
14
14
|
end
|
15
15
|
@timeout.start(5000)
|
16
16
|
|
17
|
-
@
|
17
|
+
@reactor.all(@server, @client, @timeout).catch do |reason|
|
18
18
|
@general_failure << reason.inspect
|
19
19
|
p "Failed with: #{reason.message}\n#{reason.backtrace.join("\n")}\n"
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
it "Should call the async function from the thread pool stopping the counter" do
|
24
|
-
@
|
25
|
-
|
24
|
+
@reactor.run { |reactor|
|
25
|
+
reactor.notifier do |error, context|
|
26
26
|
begin
|
27
|
-
p "Log called: #{
|
27
|
+
p "Log called: #{context}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
28
28
|
rescue Exception
|
29
29
|
p 'error in logger'
|
30
30
|
end
|
@@ -32,24 +32,24 @@ describe Libuv::Async do
|
|
32
32
|
|
33
33
|
@count = 0
|
34
34
|
|
35
|
-
timer = @
|
35
|
+
timer = @reactor.timer do
|
36
36
|
@count += 1
|
37
37
|
end
|
38
38
|
timer.start(0, 200)
|
39
39
|
|
40
|
-
callback = @
|
41
|
-
stopper = @
|
40
|
+
callback = @reactor.async do
|
41
|
+
stopper = @reactor.timer do
|
42
42
|
timer.close
|
43
43
|
callback.close
|
44
44
|
stopper.close
|
45
45
|
@timeout.close
|
46
|
-
@
|
46
|
+
@reactor.stop
|
47
47
|
end
|
48
48
|
stopper.start(1000)
|
49
49
|
callback.close
|
50
50
|
end
|
51
51
|
|
52
|
-
@
|
52
|
+
@reactor.work(proc {
|
53
53
|
callback.call
|
54
54
|
}).catch do |err|
|
55
55
|
@general_failure << err
|
data/spec/coroutines_spec.rb
CHANGED
@@ -10,10 +10,18 @@ if RUBY_PLATFORM != 'java'
|
|
10
10
|
@log = []
|
11
11
|
@general_failure = []
|
12
12
|
|
13
|
-
@
|
14
|
-
@
|
13
|
+
@reactor = Libuv::Reactor.default
|
14
|
+
@reactor.notifier do |error, context|
|
15
|
+
begin
|
16
|
+
@general_failure << "Log called: #{context}\n#{error.message}\n#{error.backtrace.join("\n") if error.backtrace}\n"
|
17
|
+
rescue Exception => e
|
18
|
+
@general_failure << "error in logger #{e.inspect}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
@timeout = @reactor.timer do
|
15
23
|
@timeout.close
|
16
|
-
@
|
24
|
+
@reactor.stop
|
17
25
|
@general_failure << "test timed out"
|
18
26
|
end
|
19
27
|
@timeout.start(5000)
|
@@ -21,24 +29,15 @@ if RUBY_PLATFORM != 'java'
|
|
21
29
|
|
22
30
|
describe 'serial execution' do
|
23
31
|
it "should wait for work to complete and return the result" do
|
24
|
-
@
|
25
|
-
logger.progress do |level, errorid, error|
|
26
|
-
begin
|
27
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n") if error.backtrace}\n"
|
28
|
-
rescue Exception => e
|
29
|
-
@general_failure << "error in logger #{e.inspect}"
|
30
|
-
end
|
31
|
-
end
|
32
|
+
@reactor.run { |reactor|
|
32
33
|
|
33
|
-
|
34
|
-
@log << co(@loop.work(proc {
|
34
|
+
@log << co(@reactor.work(proc {
|
35
35
|
sleep 1
|
36
36
|
'work done'
|
37
37
|
}))
|
38
38
|
@log << 'after work'
|
39
39
|
|
40
40
|
@timeout.close
|
41
|
-
@loop.stop
|
42
41
|
}
|
43
42
|
|
44
43
|
expect(@general_failure).to eq([])
|
@@ -46,17 +45,9 @@ if RUBY_PLATFORM != 'java'
|
|
46
45
|
end
|
47
46
|
|
48
47
|
it "should raise an error if the promise is rejected" do
|
49
|
-
@
|
50
|
-
logger.progress do |level, errorid, error|
|
51
|
-
begin
|
52
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n") if error.backtrace}\n"
|
53
|
-
rescue Exception => e
|
54
|
-
@general_failure << "error in logger #{e.inspect}"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
48
|
+
@reactor.run { |reactor|
|
58
49
|
begin
|
59
|
-
@log << co(@
|
50
|
+
@log << co(@reactor.work(proc {
|
60
51
|
raise 'rejected'
|
61
52
|
}))
|
62
53
|
@log << 'after work'
|
@@ -65,7 +56,6 @@ if RUBY_PLATFORM != 'java'
|
|
65
56
|
end
|
66
57
|
|
67
58
|
@timeout.close
|
68
|
-
@loop.stop
|
69
59
|
}
|
70
60
|
|
71
61
|
expect(@general_failure).to eq([])
|
@@ -73,22 +63,13 @@ if RUBY_PLATFORM != 'java'
|
|
73
63
|
end
|
74
64
|
|
75
65
|
it "should return the results of multiple promises" do
|
76
|
-
@
|
77
|
-
|
78
|
-
begin
|
79
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n") if error.backtrace}\n"
|
80
|
-
rescue Exception => e
|
81
|
-
@general_failure << "error in logger #{e.inspect}"
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
|
86
|
-
job1 = @loop.work(proc {
|
66
|
+
@reactor.run { |reactor|
|
67
|
+
job1 = @reactor.work(proc {
|
87
68
|
sleep 1
|
88
69
|
'job1'
|
89
70
|
})
|
90
71
|
|
91
|
-
job2 = @
|
72
|
+
job2 = @reactor.work(proc {
|
92
73
|
sleep 1
|
93
74
|
'job2'
|
94
75
|
})
|
@@ -101,7 +82,6 @@ if RUBY_PLATFORM != 'java'
|
|
101
82
|
@log << 'after work'
|
102
83
|
|
103
84
|
@timeout.close
|
104
|
-
@loop.stop
|
105
85
|
}
|
106
86
|
|
107
87
|
expect(@general_failure).to eq([])
|
@@ -110,16 +90,8 @@ if RUBY_PLATFORM != 'java'
|
|
110
90
|
|
111
91
|
|
112
92
|
it "should provide a callback option for progress events" do
|
113
|
-
@
|
114
|
-
|
115
|
-
begin
|
116
|
-
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n") if error.backtrace}\n"
|
117
|
-
rescue Exception => e
|
118
|
-
@general_failure << "error in logger #{e.inspect}"
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
timer = @loop.timer
|
93
|
+
@reactor.run { |reactor|
|
94
|
+
timer = @reactor.timer
|
123
95
|
timer.start(0)
|
124
96
|
co(timer) do
|
125
97
|
@log << 'in timer'
|
@@ -127,9 +99,7 @@ if RUBY_PLATFORM != 'java'
|
|
127
99
|
end
|
128
100
|
|
129
101
|
@log << 'after timer'
|
130
|
-
|
131
102
|
@timeout.close
|
132
|
-
@loop.stop
|
133
103
|
}
|
134
104
|
|
135
105
|
expect(@log).to eq(['in timer', 'after timer'])
|