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/error.rb
CHANGED
data/lib/libuv/ext/ext.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'forwardable'
|
2
4
|
require 'ffi'
|
3
5
|
|
@@ -13,28 +15,23 @@ module Libuv
|
|
13
15
|
extend FFI::Library
|
14
16
|
ffi_lib(FFI::Library::LIBC).first
|
15
17
|
|
16
|
-
attach_function :malloc, [:size_t], :pointer
|
17
|
-
attach_function :free, [:pointer], :void
|
18
|
+
attach_function :malloc, [:size_t], :pointer
|
19
|
+
attach_function :free, [:pointer], :void
|
18
20
|
end
|
19
|
-
|
21
|
+
def_delegators :LIBC, :malloc, :free
|
22
|
+
module_function :malloc, :free
|
20
23
|
|
21
|
-
def self.malloc(size)
|
22
|
-
LIBC.malloc(size)
|
23
|
-
end
|
24
24
|
|
25
|
-
def self.
|
26
|
-
|
25
|
+
def self.path_to_internal_libuv
|
26
|
+
@path_to_internal_libuv ||= ::File.expand_path("../../../../ext/libuv/lib/libuv.#{FFI::Platform::LIBSUFFIX}", __FILE__)
|
27
27
|
end
|
28
28
|
|
29
29
|
|
30
30
|
begin
|
31
31
|
# bias the library discovery to a path inside the gem first, then
|
32
32
|
# to the usual system paths
|
33
|
-
|
34
|
-
path_to_internal_libuv = ::File.dirname(__FILE__) + '/../../../ext/libuv/lib'
|
35
|
-
|
36
33
|
paths = [
|
37
|
-
path_to_internal_libuv,
|
34
|
+
::File.expand_path('../', path_to_internal_libuv),
|
38
35
|
'/usr/local/lib',
|
39
36
|
'/opt/local/lib',
|
40
37
|
'/usr/lib64'
|
@@ -63,16 +60,11 @@ module Libuv
|
|
63
60
|
end
|
64
61
|
|
65
62
|
|
66
|
-
def self.path_to_internal_libuv
|
67
|
-
@path_to_internal_libuv ||= ::File.expand_path("../../../../ext/libuv/lib/libuv.#{FFI::Platform::LIBSUFFIX}", __FILE__)
|
68
|
-
end
|
69
|
-
|
70
|
-
|
71
63
|
require 'libuv/ext/types'
|
72
64
|
|
73
65
|
|
74
|
-
attach_function :handle_size, :uv_handle_size, [:uv_handle_type], :size_t
|
75
|
-
attach_function :req_size, :uv_req_size, [:uv_req_type], :size_t
|
66
|
+
attach_function :handle_size, :uv_handle_size, [:uv_handle_type], :size_t
|
67
|
+
attach_function :req_size, :uv_req_size, [:uv_req_type], :size_t
|
76
68
|
|
77
69
|
|
78
70
|
# We need to calculate where the FS request data is located using req_size
|
@@ -89,8 +81,8 @@ module Libuv
|
|
89
81
|
callback :uv_fs_cb, [FsRequest.by_ref], :void
|
90
82
|
|
91
83
|
|
92
|
-
attach_function :version_number, :uv_version, [], :uint
|
93
|
-
attach_function :version_string, :uv_version_string, [], :string
|
84
|
+
attach_function :version_number, :uv_version, [], :uint
|
85
|
+
attach_function :version_string, :uv_version_string, [], :string
|
94
86
|
|
95
87
|
attach_function :loop_new, :uv_loop_new, [], :uv_loop_t, :blocking => true
|
96
88
|
attach_function :loop_delete, :uv_loop_delete, [:uv_loop_t], :void, :blocking => true
|
@@ -98,18 +90,18 @@ module Libuv
|
|
98
90
|
attach_function :run, :uv_run, [:uv_loop_t, :uv_run_mode], :int, :blocking => true
|
99
91
|
attach_function :stop, :uv_stop, [:uv_loop_t], :void, :blocking => true
|
100
92
|
attach_function :update_time, :uv_update_time, [:uv_loop_t], :void, :blocking => true
|
101
|
-
attach_function :now, :uv_now, [:uv_loop_t], :uint64
|
93
|
+
attach_function :now, :uv_now, [:uv_loop_t], :uint64
|
102
94
|
|
103
95
|
attach_function :backend_timeout, :uv_backend_timeout, [:uv_loop_t], :int, :blocking => true
|
104
96
|
attach_function :backend_fd, :uv_backend_fd, [:uv_loop_t], :int, :blocking => true
|
105
97
|
|
106
|
-
attach_function :strerror, :uv_strerror, [:int], :string
|
107
|
-
attach_function :err_name, :uv_err_name, [:int], :string
|
98
|
+
attach_function :strerror, :uv_strerror, [:int], :string
|
99
|
+
attach_function :err_name, :uv_err_name, [:int], :string
|
108
100
|
|
109
|
-
attach_function :ref, :uv_ref, [:uv_handle_t], :void
|
110
|
-
attach_function :unref, :uv_unref, [:uv_handle_t], :void
|
111
|
-
attach_function :has_ref, :uv_has_ref, [:uv_handle_t], :int
|
112
|
-
attach_function :is_active, :uv_is_active, [:uv_handle_t], :int
|
101
|
+
attach_function :ref, :uv_ref, [:uv_handle_t], :void
|
102
|
+
attach_function :unref, :uv_unref, [:uv_handle_t], :void
|
103
|
+
attach_function :has_ref, :uv_has_ref, [:uv_handle_t], :int
|
104
|
+
attach_function :is_active, :uv_is_active, [:uv_handle_t], :int
|
113
105
|
attach_function :walk, :uv_walk, [:uv_loop_t, :uv_walk_cb, :pointer], :void, :blocking => true
|
114
106
|
attach_function :close, :uv_close, [:uv_handle_t, :uv_close_cb], :void, :blocking => true
|
115
107
|
attach_function :is_closing, :uv_is_closing, [:uv_handle_t], :int, :blocking => true
|
@@ -119,7 +111,7 @@ module Libuv
|
|
119
111
|
# https://github.com/joyent/libuv/commit/4ca9a363897cfa60f4e2229e4f15ac5abd7fd103
|
120
112
|
# uv_fileno
|
121
113
|
|
122
|
-
attach_function :buf_init, :uv_buf_init, [:pointer, :size_t], UvBuf.by_value
|
114
|
+
attach_function :buf_init, :uv_buf_init, [:pointer, :size_t], UvBuf.by_value
|
123
115
|
|
124
116
|
attach_function :listen, :uv_listen, [:uv_stream_t, :int, :uv_connection_cb], :int, :blocking => true
|
125
117
|
attach_function :accept, :uv_accept, [:uv_stream_t, :uv_stream_t], :int, :blocking => true
|
@@ -195,8 +187,8 @@ module Libuv
|
|
195
187
|
attach_function :timer_set_repeat, :uv_timer_set_repeat, [:uv_timer_t, :int64_t], :void, :blocking => true
|
196
188
|
attach_function :timer_get_repeat, :uv_timer_get_repeat, [:uv_timer_t], :int64_t, :blocking => true
|
197
189
|
#:addrinfo
|
198
|
-
attach_function :getaddrinfo, :uv_getaddrinfo, [:uv_loop_t, :uv_getaddrinfo_t, :uv_getaddrinfo_cb, :string, :string, UvAddrinfo.by_ref], :int
|
199
|
-
attach_function :freeaddrinfo, :uv_freeaddrinfo, [UvAddrinfo.by_ref], :void
|
190
|
+
attach_function :getaddrinfo, :uv_getaddrinfo, [:uv_loop_t, :uv_getaddrinfo_t, :uv_getaddrinfo_cb, :string, :string, UvAddrinfo.by_ref], :int
|
191
|
+
attach_function :freeaddrinfo, :uv_freeaddrinfo, [UvAddrinfo.by_ref], :void
|
200
192
|
|
201
193
|
attach_function :spawn, :uv_spawn, [:uv_loop_t, :uv_process_t, :uv_options_t], :int, :blocking => true
|
202
194
|
attach_function :process_kill, :uv_process_kill, [:uv_process_t, :int], :int, :blocking => true
|
@@ -246,10 +238,10 @@ module Libuv
|
|
246
238
|
|
247
239
|
attach_function :fs_event_init, :uv_fs_event_init, [:uv_loop_t, :uv_fs_event_t, :string, :uv_fs_event_cb, :int], :int, :blocking => true
|
248
240
|
|
249
|
-
attach_function :ip4_addr, :uv_ip4_addr, [:string, :int, :sockaddr_in4], :int
|
250
|
-
attach_function :ip6_addr, :uv_ip6_addr, [:string, :int, :sockaddr_in6], :int
|
251
|
-
attach_function :ip4_name, :uv_ip4_name, [:sockaddr_in4, :pointer, :size_t], :int
|
252
|
-
attach_function :ip6_name, :uv_ip6_name, [:sockaddr_in6, :pointer, :size_t], :int
|
241
|
+
attach_function :ip4_addr, :uv_ip4_addr, [:string, :int, :sockaddr_in4], :int
|
242
|
+
attach_function :ip6_addr, :uv_ip6_addr, [:string, :int, :sockaddr_in6], :int
|
243
|
+
attach_function :ip4_name, :uv_ip4_name, [:sockaddr_in4, :pointer, :size_t], :int
|
244
|
+
attach_function :ip6_name, :uv_ip6_name, [:sockaddr_in6, :pointer, :size_t], :int
|
253
245
|
#TODO:: attach_function :inet_ntop, :uv_inet_ntop, [:int, :pointer, ]
|
254
246
|
#TODO:: attach_function :uv_inet_pton
|
255
247
|
|
@@ -300,4 +292,4 @@ module Libuv
|
|
300
292
|
define_singleton_method(:"allocate_request_#{request_type}") { LIBC.malloc(request_size) }
|
301
293
|
end
|
302
294
|
end
|
303
|
-
end
|
295
|
+
end
|
data/lib/libuv/ext/tasks.rb
CHANGED
data/lib/libuv/ext/tasks/mac.rb
CHANGED
data/lib/libuv/ext/tasks/unix.rb
CHANGED
data/lib/libuv/ext/tasks/win.rb
CHANGED
data/lib/libuv/ext/types.rb
CHANGED
data/lib/libuv/file.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Libuv
|
2
4
|
class File < Q::DeferredPromise
|
3
5
|
include Assertions, Resource, Listener, FsChecks
|
@@ -20,14 +22,14 @@ module Libuv
|
|
20
22
|
define_callback function: :on_stat, **fs_params
|
21
23
|
|
22
24
|
|
23
|
-
EOF = "0\r\n\r\n"
|
24
|
-
CRLF = "\r\n"
|
25
|
+
EOF = "0\r\n\r\n"
|
26
|
+
CRLF = "\r\n"
|
25
27
|
|
26
28
|
|
27
29
|
attr_reader :fileno, :closed
|
28
30
|
|
29
31
|
|
30
|
-
def initialize(thread, path, flags = 0, mode
|
32
|
+
def initialize(thread, path, flags = 0, mode: 0, wait: true, &blk)
|
31
33
|
super(thread, thread.defer)
|
32
34
|
|
33
35
|
@fileno = -1
|
@@ -36,21 +38,27 @@ module Libuv
|
|
36
38
|
@request_refs = {}
|
37
39
|
|
38
40
|
request = ::Libuv::Ext.allocate_request_fs
|
39
|
-
pre_check @defer, request, ::Libuv::Ext.fs_open(@
|
40
|
-
|
41
|
+
pre_check @defer, request, ::Libuv::Ext.fs_open(@reactor, request, @path, @flags, @mode, callback(:on_open, request.address))
|
42
|
+
|
43
|
+
if block_given?
|
44
|
+
self.progress blk
|
45
|
+
elsif wait
|
46
|
+
@coroutine = @reactor.defer
|
47
|
+
co @coroutine.promise
|
48
|
+
end
|
41
49
|
end
|
42
50
|
|
43
51
|
def close
|
44
52
|
@closed = true
|
45
53
|
request = ::Libuv::Ext.allocate_request_fs
|
46
|
-
pre_check(@defer, request, ::Libuv::Ext.fs_close(@
|
47
|
-
|
54
|
+
pre_check(@defer, request, ::Libuv::Ext.fs_close(@reactor.handle, request, @fileno, callback(:on_close, request.address)))
|
55
|
+
self
|
48
56
|
end
|
49
57
|
|
50
|
-
def read(length, offset = 0)
|
58
|
+
def read(length, offset = 0, wait: true)
|
51
59
|
assert_type(Integer, length, "length must be an Integer")
|
52
60
|
assert_type(Integer, offset, "offset must be an Integer")
|
53
|
-
deferred = @
|
61
|
+
deferred = @reactor.defer
|
54
62
|
|
55
63
|
buffer1 = FFI::MemoryPointer.new(length)
|
56
64
|
buffer = ::Libuv::Ext.buf_init(buffer1, length)
|
@@ -58,13 +66,14 @@ module Libuv
|
|
58
66
|
|
59
67
|
@request_refs[request.address] = [deferred, buffer1]
|
60
68
|
|
61
|
-
pre_check(deferred, request, ::Libuv::Ext.fs_read(@
|
69
|
+
promise = pre_check(deferred, request, ::Libuv::Ext.fs_read(@reactor.handle, request, @fileno, buffer, 1, offset, callback(:on_read, request.address)))
|
70
|
+
wait ? co(promise) : promise
|
62
71
|
end
|
63
72
|
|
64
|
-
def write(data, offset = 0)
|
73
|
+
def write(data, offset = 0, wait: true)
|
65
74
|
assert_type(String, data, "data must be a String")
|
66
75
|
assert_type(Integer, offset, "offset must be an Integer")
|
67
|
-
deferred = @
|
76
|
+
deferred = @reactor.defer
|
68
77
|
|
69
78
|
length = data.respond_to?(:bytesize) ? data.bytesize : data.size
|
70
79
|
|
@@ -74,84 +83,87 @@ module Libuv
|
|
74
83
|
|
75
84
|
@request_refs[request.address] = [deferred, buffer1]
|
76
85
|
|
77
|
-
pre_check(deferred, request, ::Libuv::Ext.fs_write(@
|
86
|
+
respond wait, pre_check(deferred, request, ::Libuv::Ext.fs_write(@reactor.handle, request, @fileno, buffer, 1, offset, callback(:on_write, request.address)))
|
78
87
|
end
|
79
88
|
|
80
|
-
def sync
|
81
|
-
deferred = @
|
89
|
+
def sync(wait: false)
|
90
|
+
deferred = @reactor.defer
|
82
91
|
|
83
92
|
request = ::Libuv::Ext.allocate_request_fs
|
84
93
|
@request_refs[request.address] = deferred
|
85
94
|
|
86
|
-
pre_check
|
95
|
+
respond wait, pre_check(deferred, request, ::Libuv::Ext.fs_fsync(@reactor.handle, request, @fileno, callback(:on_sync, request.address)))
|
87
96
|
end
|
88
97
|
|
89
|
-
def datasync
|
90
|
-
deferred = @
|
98
|
+
def datasync(wait: false)
|
99
|
+
deferred = @reactor.defer
|
91
100
|
|
92
101
|
request = ::Libuv::Ext.allocate_request_fs
|
93
102
|
@request_refs[request.address] = deferred
|
94
103
|
|
95
|
-
pre_check
|
104
|
+
respond wait, pre_check(deferred, request, ::Libuv::Ext.fs_fdatasync(@reactor.handle, request, @fileno, callback(:on_datasync, request.address)))
|
96
105
|
end
|
97
106
|
|
98
|
-
def truncate(offset)
|
107
|
+
def truncate(offset, wait: true)
|
99
108
|
assert_type(Integer, offset, "offset must be an Integer")
|
100
|
-
deferred = @
|
109
|
+
deferred = @reactor.defer
|
101
110
|
|
102
111
|
request = ::Libuv::Ext.allocate_request_fs
|
103
112
|
@request_refs[request.address] = deferred
|
104
113
|
|
105
|
-
pre_check
|
114
|
+
respond wait, pre_check(deferred, request, ::Libuv::Ext.fs_ftruncate(@reactor.handle, request, @fileno, offset, callback(:on_truncate, request.address)))
|
106
115
|
end
|
107
116
|
|
108
|
-
def utime(atime
|
117
|
+
def utime(atime:, mtime:, wait: true)
|
109
118
|
assert_type(Integer, atime, "atime must be an Integer")
|
110
119
|
assert_type(Integer, mtime, "mtime must be an Integer")
|
111
|
-
deferred = @
|
120
|
+
deferred = @reactor.defer
|
112
121
|
|
113
122
|
request = ::Libuv::Ext.allocate_request_fs
|
114
123
|
@request_refs[request.address] = deferred
|
115
124
|
|
116
|
-
pre_check deferred, request, ::Libuv::Ext.fs_futime(@
|
125
|
+
promise = pre_check deferred, request, ::Libuv::Ext.fs_futime(@reactor.handle, request, @fileno, atime, mtime, callback(:on_utime, request.address))
|
126
|
+
wait ? co(promise) : promise
|
117
127
|
end
|
118
128
|
|
119
|
-
def chmod(mode)
|
129
|
+
def chmod(mode, wait: true)
|
120
130
|
assert_type(Integer, mode, "mode must be an Integer")
|
121
|
-
deferred = @
|
131
|
+
deferred = @reactor.defer
|
122
132
|
|
123
133
|
request = ::Libuv::Ext.allocate_request_fs
|
124
134
|
@request_refs[request.address] = deferred
|
125
135
|
|
126
|
-
pre_check
|
136
|
+
respond wait, pre_check(deferred, request, ::Libuv::Ext.fs_fchmod(@reactor.handle, request, @fileno, mode, callback(:on_chmod, request.address)))
|
127
137
|
end
|
128
138
|
|
129
|
-
def chown(uid
|
139
|
+
def chown(uid:, gid:, wait: true)
|
130
140
|
assert_type(Integer, uid, "uid must be an Integer")
|
131
141
|
assert_type(Integer, gid, "gid must be an Integer")
|
132
|
-
deferred = @
|
142
|
+
deferred = @reactor.defer
|
133
143
|
|
134
144
|
request = ::Libuv::Ext.allocate_request_fs
|
135
145
|
@request_refs[request.address] = deferred
|
136
146
|
|
137
|
-
pre_check
|
147
|
+
respond wait, pre_check(deferred, request, ::Libuv::Ext.fs_fchown(@reactor.handle, request, @fileno, uid, gid, callback(:on_chown, request.address)))
|
138
148
|
end
|
139
149
|
|
140
|
-
def send_file(stream,
|
150
|
+
def send_file(stream, using: :raw, chunk_size: 4096, wait: true)
|
141
151
|
@transmit_failure ||= method(:transmit_failure)
|
142
152
|
@transmit_data ||= method(:transmit_data)
|
143
153
|
@start_transmit ||= method(:start_transmit)
|
144
154
|
@next_chunk ||= method(:next_chunk)
|
145
155
|
|
146
|
-
@sending_file = @
|
156
|
+
@sending_file = @reactor.defer
|
147
157
|
@file_stream = stream
|
148
|
-
@file_stream_type =
|
158
|
+
@file_stream_type = using
|
149
159
|
@file_chunk_size = chunk_size
|
150
160
|
@file_chunk_count = 0
|
151
161
|
|
152
|
-
stat.then @start_transmit, @transmit_failure
|
162
|
+
stat(wait: false).then @start_transmit, @transmit_failure
|
153
163
|
|
154
|
-
@sending_file.promise
|
164
|
+
promise = @sending_file.promise
|
165
|
+
promise.finally &method(:clean_up_send)
|
166
|
+
respond wait, promise
|
155
167
|
end
|
156
168
|
|
157
169
|
|
@@ -168,13 +180,13 @@ module Libuv
|
|
168
180
|
def transmit_data(data)
|
169
181
|
@file_chunk_count += 1
|
170
182
|
if @file_stream_type == :http
|
171
|
-
resp =
|
183
|
+
resp = String.new
|
172
184
|
resp << data.bytesize.to_s(16) << CRLF
|
173
185
|
resp << data
|
174
186
|
resp << CRLF
|
175
187
|
data = resp
|
176
188
|
end
|
177
|
-
@file_stream.write(data).then @next_chunk, @transmit_failure
|
189
|
+
@file_stream.write(data, wait: :promise).then @next_chunk, @transmit_failure
|
178
190
|
nil
|
179
191
|
end
|
180
192
|
|
@@ -184,7 +196,7 @@ module Libuv
|
|
184
196
|
|
185
197
|
if next_offset >= @file_stream_total
|
186
198
|
if @file_stream_type == :http
|
187
|
-
@file_stream.write(EOF
|
199
|
+
@file_stream.write(EOF, wait: :promise).then(proc {
|
188
200
|
@sending_file.resolve(@file_stream_total)
|
189
201
|
}, @transmit_failure)
|
190
202
|
else
|
@@ -194,7 +206,7 @@ module Libuv
|
|
194
206
|
if next_offset + next_size > @file_stream_total
|
195
207
|
next_size = @file_stream_total - next_offset
|
196
208
|
end
|
197
|
-
read(next_size, next_offset).then(@transmit_data, @transmit_failure)
|
209
|
+
read(next_size, next_offset, wait: false).then(@transmit_data, @transmit_failure)
|
198
210
|
end
|
199
211
|
nil
|
200
212
|
end
|
@@ -220,14 +232,19 @@ module Libuv
|
|
220
232
|
@fileno = req[:result]
|
221
233
|
cleanup(req)
|
222
234
|
@closed = false
|
223
|
-
@defer.notify(self)
|
235
|
+
::Fiber.new { @defer.notify(self) }.resume
|
236
|
+
|
237
|
+
if @coroutine
|
238
|
+
@coroutine.resolve(nil)
|
239
|
+
@coroutine = nil
|
240
|
+
end
|
224
241
|
end
|
225
242
|
end
|
226
243
|
|
227
244
|
def on_close(req)
|
228
245
|
if post_check(req, @defer)
|
229
246
|
cleanup(req)
|
230
|
-
@defer.resolve(nil)
|
247
|
+
::Fiber.new { @defer.resolve(nil) }.resume
|
231
248
|
end
|
232
249
|
end
|
233
250
|
|
@@ -236,7 +253,7 @@ module Libuv
|
|
236
253
|
if post_check(req, deferred)
|
237
254
|
data = buffer1.read_string(req[:result])
|
238
255
|
cleanup(req)
|
239
|
-
deferred.resolve(data)
|
256
|
+
::Fiber.new { deferred.resolve(data) }.resume
|
240
257
|
end
|
241
258
|
end
|
242
259
|
|
@@ -244,7 +261,7 @@ module Libuv
|
|
244
261
|
deferred, buffer1 = @request_refs.delete req.to_ptr.address
|
245
262
|
if post_check(req, deferred)
|
246
263
|
cleanup(req)
|
247
|
-
deferred.resolve(nil)
|
264
|
+
::Fiber.new { deferred.resolve(nil) }.resume
|
248
265
|
end
|
249
266
|
end
|
250
267
|
|
@@ -252,7 +269,7 @@ module Libuv
|
|
252
269
|
deferred = @request_refs.delete req.to_ptr.address
|
253
270
|
if post_check(req, deferred)
|
254
271
|
cleanup(req)
|
255
|
-
deferred.resolve(nil)
|
272
|
+
::Fiber.new { deferred.resolve(nil) }.resume
|
256
273
|
end
|
257
274
|
end
|
258
275
|
|
@@ -260,7 +277,7 @@ module Libuv
|
|
260
277
|
deferred = @request_refs.delete req.to_ptr.address
|
261
278
|
if post_check(req, deferred)
|
262
279
|
cleanup(req)
|
263
|
-
deferred.resolve(nil)
|
280
|
+
::Fiber.new { deferred.resolve(nil) }.resume
|
264
281
|
end
|
265
282
|
end
|
266
283
|
|
@@ -268,7 +285,7 @@ module Libuv
|
|
268
285
|
deferred = @request_refs.delete req.to_ptr.address
|
269
286
|
if post_check(req, deferred)
|
270
287
|
cleanup(req)
|
271
|
-
deferred.resolve(nil)
|
288
|
+
::Fiber.new { deferred.resolve(nil) }.resume
|
272
289
|
end
|
273
290
|
end
|
274
291
|
|
@@ -276,7 +293,7 @@ module Libuv
|
|
276
293
|
deferred = @request_refs.delete req.to_ptr.address
|
277
294
|
if post_check(req, deferred)
|
278
295
|
cleanup(req)
|
279
|
-
deferred.resolve(nil)
|
296
|
+
::Fiber.new { deferred.resolve(nil) }.resume
|
280
297
|
end
|
281
298
|
end
|
282
299
|
|
@@ -284,7 +301,7 @@ module Libuv
|
|
284
301
|
deferred = @request_refs.delete req.to_ptr.address
|
285
302
|
if post_check(req, deferred)
|
286
303
|
cleanup(req)
|
287
|
-
deferred.resolve(nil)
|
304
|
+
::Fiber.new { deferred.resolve(nil) }.resume
|
288
305
|
end
|
289
306
|
end
|
290
307
|
|
@@ -292,7 +309,7 @@ module Libuv
|
|
292
309
|
deferred = @request_refs.delete req.to_ptr.address
|
293
310
|
if post_check(req, deferred)
|
294
311
|
cleanup(req)
|
295
|
-
deferred.resolve(nil)
|
312
|
+
::Fiber.new { deferred.resolve(nil) }.resume
|
296
313
|
end
|
297
314
|
end
|
298
315
|
end
|