libuv 0.10.2 → 0.10.3
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 +7 -0
- data/lib/libuv/ext/ext.rb +7 -13
- data/lib/libuv/ext/platform/unix.rb +4 -0
- data/lib/libuv/ext/platform/windows.rb +2 -0
- data/lib/libuv/ext/tasks/mac.rb +1 -1
- data/lib/libuv/ext/tasks/unix.rb +1 -1
- data/lib/libuv/ext/types.rb +7 -14
- data/lib/libuv/loop.rb +54 -19
- data/lib/libuv/mixins/assertions.rb +1 -1
- data/lib/libuv/mixins/resource.rb +3 -3
- data/lib/libuv/mixins/stream.rb +11 -4
- data/lib/libuv/prepare.rb +1 -1
- data/lib/libuv/q.rb +28 -3
- data/lib/libuv/tcp.rb +37 -38
- data/lib/libuv/timer.rb +5 -2
- data/lib/libuv/udp.rb +66 -115
- data/lib/libuv/version.rb +1 -1
- data/lib/libuv/work.rb +13 -4
- data/spec/filesystem_spec.rb +8 -3
- data/spec/pipe_spec.rb +16 -9
- data/spec/tcp_spec.rb +6 -6
- metadata +50 -60
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 769f10cadb566b542368277dfee691a5aa2af059
|
4
|
+
data.tar.gz: 8114fb75a4da94c6341e6ead1faf5d59182c9245
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 33e0394111e14048717934b2cffbc6f37d660117f6bc871eb7bb4da8089c0a303629b28febb6ee762f870039968029f620c35303b68302f1b8e1fc18bdbd2522
|
7
|
+
data.tar.gz: b1d5f5af132c26fdb88d732c188f6b067714512e3466feb63bef970f56374f961810c1a63d8d5e8c9301af28f23e0b70aae7a6bf917e07fd38c0b6e806565216
|
data/lib/libuv/ext/ext.rb
CHANGED
@@ -85,9 +85,7 @@ module Libuv
|
|
85
85
|
attach_function :close, :uv_close, [:uv_handle_t, :uv_close_cb], :void, :blocking => true
|
86
86
|
attach_function :is_closing, :uv_is_closing, [:uv_handle_t], :int, :blocking => true
|
87
87
|
|
88
|
-
attach_function :buf_init, :uv_buf_init, [:pointer, :size_t],
|
89
|
-
attach_function :strlcpy, :uv_strlcpy, [:string, :string, :size_t], :size_t, :blocking => true
|
90
|
-
attach_function :strlcat, :uv_strlcat, [:string, :string, :size_t], :size_t, :blocking => true
|
88
|
+
attach_function :buf_init, :uv_buf_init, [:pointer, :size_t], UvBuf.by_value, :blocking => true
|
91
89
|
|
92
90
|
attach_function :listen, :uv_listen, [:uv_stream_t, :int, :uv_connection_cb], :int, :blocking => true
|
93
91
|
attach_function :accept, :uv_accept, [:uv_stream_t, :uv_stream_t], :int, :blocking => true
|
@@ -101,21 +99,18 @@ module Libuv
|
|
101
99
|
attach_function :shutdown, :uv_shutdown, [:uv_shutdown_t, :uv_stream_t, :uv_shutdown_cb], :int, :blocking => true
|
102
100
|
|
103
101
|
attach_function :tcp_init, :uv_tcp_init, [:uv_loop_t, :uv_tcp_t], :int, :blocking => true
|
104
|
-
|
102
|
+
attach_function :tcp_open, :uv_tcp_open, [:uv_tcp_t, :uv_os_sock_t], :int, :blocking => true
|
105
103
|
attach_function :tcp_nodelay, :uv_tcp_nodelay, [:uv_tcp_t, :int], :int, :blocking => true
|
106
104
|
attach_function :tcp_keepalive, :uv_tcp_keepalive, [:uv_tcp_t, :int, :uint], :int, :blocking => true
|
107
105
|
attach_function :tcp_simultaneous_accepts, :uv_tcp_simultaneous_accepts, [:uv_tcp_t, :int], :int, :blocking => true
|
108
106
|
attach_function :tcp_bind, :uv_tcp_bind, [:uv_tcp_t, :sockaddr_in], :int, :blocking => true
|
109
|
-
attach_function :tcp_bind6, :uv_tcp_bind6, [:uv_tcp_t, :sockaddr_in6], :int, :blocking => true
|
110
107
|
attach_function :tcp_getsockname, :uv_tcp_getsockname, [:uv_tcp_t, :pointer, :pointer], :int, :blocking => true
|
111
108
|
attach_function :tcp_getpeername, :uv_tcp_getpeername, [:uv_tcp_t, :pointer, :pointer], :int, :blocking => true
|
112
109
|
attach_function :tcp_connect, :uv_tcp_connect, [:uv_connect_t, :uv_tcp_t, :sockaddr_in, :uv_connect_cb], :int, :blocking => true
|
113
|
-
attach_function :tcp_connect6, :uv_tcp_connect6, [:uv_connect_t, :uv_tcp_t, :sockaddr_in6, :uv_connect_cb], :int, :blocking => true
|
114
110
|
|
115
111
|
attach_function :udp_init, :uv_udp_init, [:uv_loop_t, :uv_udp_t], :int, :blocking => true
|
116
|
-
|
112
|
+
attach_function :udp_open, :uv_udp_open, [:uv_udp_t, :uv_os_sock_t], :int, :blocking => true
|
117
113
|
attach_function :udp_bind, :uv_udp_bind, [:uv_udp_t, :sockaddr_in, :uint], :int, :blocking => true
|
118
|
-
attach_function :udp_bind6, :uv_udp_bind6, [:uv_udp_t, :sockaddr_in6, :uint], :int, :blocking => true
|
119
114
|
attach_function :udp_getsockname, :uv_udp_getsockname, [:uv_udp_t, :pointer, :pointer], :int, :blocking => true
|
120
115
|
attach_function :udp_set_membership, :uv_udp_set_membership, [:uv_udp_t, :string, :string, :uv_membership], :int, :blocking => true
|
121
116
|
attach_function :udp_set_multicast_loop, :uv_udp_set_multicast_loop, [:uv_udp_t, :int], :int, :blocking => true
|
@@ -123,7 +118,6 @@ module Libuv
|
|
123
118
|
attach_function :udp_set_broadcast, :uv_udp_set_broadcast, [:uv_udp_t, :int], :int, :blocking => true
|
124
119
|
attach_function :udp_set_ttl, :uv_udp_set_ttl, [:uv_udp_t, :int], :int, :blocking => true
|
125
120
|
attach_function :udp_send, :uv_udp_send, [:uv_udp_send_t, :uv_udp_t, :pointer, :int, :sockaddr_in, :uv_udp_send_cb], :int, :blocking => true
|
126
|
-
attach_function :udp_send6, :uv_udp_send6, [:uv_udp_send_t, :uv_udp_t, :pointer, :int, :sockaddr_in6, :uv_udp_send_cb], :int, :blocking => true
|
127
121
|
attach_function :udp_recv_start, :uv_udp_recv_start, [:uv_udp_t, :uv_alloc_cb, :uv_udp_recv_cb], :int, :blocking => true
|
128
122
|
attach_function :udp_recv_stop, :uv_udp_recv_stop, [:uv_udp_t], :int, :blocking => true
|
129
123
|
|
@@ -211,10 +205,10 @@ module Libuv
|
|
211
205
|
|
212
206
|
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
|
213
207
|
|
214
|
-
attach_function :ip4_addr, :uv_ip4_addr, [:string, :int], :
|
215
|
-
attach_function :ip6_addr, :uv_ip6_addr, [:string, :int
|
216
|
-
attach_function :ip4_name, :uv_ip4_name, [
|
217
|
-
attach_function :ip6_name, :uv_ip6_name, [
|
208
|
+
attach_function :ip4_addr, :uv_ip4_addr, [:string, :int, :sockaddr_in4], :int, :blocking => true
|
209
|
+
attach_function :ip6_addr, :uv_ip6_addr, [:string, :int, :sockaddr_in6], :int, :blocking => true
|
210
|
+
attach_function :ip4_name, :uv_ip4_name, [:sockaddr_in4, :pointer, :size_t], :int, :blocking => true
|
211
|
+
attach_function :ip6_name, :uv_ip6_name, [:sockaddr_in6, :pointer, :size_t], :int, :blocking => true
|
218
212
|
#TODO:: attach_function :inet_ntop, :uv_inet_ntop, [:int, :pointer, ]
|
219
213
|
#TODO:: attach_function :uv_inet_pton
|
220
214
|
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module Libuv
|
2
2
|
module Ext
|
3
|
+
typedef :int, :uv_os_sock_t
|
4
|
+
|
3
5
|
class UvBuf < FFI::Struct
|
4
6
|
layout :base, :pointer, :len, :size_t
|
5
7
|
end
|
@@ -10,5 +12,7 @@ module Libuv
|
|
10
12
|
:st_blksize, :blksize_t, :st_blocks, :blkcnt_t, :st_atime, :time_t,
|
11
13
|
:st_mtime, :time_t, :st_ctime, :time_t
|
12
14
|
end
|
15
|
+
|
16
|
+
attach_function :ntohs, [:ushort], :ushort, :blocking => true
|
13
17
|
end
|
14
18
|
end
|
data/lib/libuv/ext/tasks/mac.rb
CHANGED
@@ -5,7 +5,7 @@ file 'ext/libuv/uv.xcodeproj' => 'ext/libuv/build/gyp' do
|
|
5
5
|
abort "Don't know how to build on #{FFI::Platform::ARCH} (yet)" unless target_arch
|
6
6
|
|
7
7
|
Dir.chdir("ext/libuv") do |path|
|
8
|
-
system "./gyp_uv -f xcode -Dtarget_arch=#{target_arch} -Dlibrary=shared_library -Dcomponent=shared_library"
|
8
|
+
system "./gyp_uv.py -f xcode -Dtarget_arch=#{target_arch} -Dlibrary=shared_library -Dcomponent=shared_library"
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
data/lib/libuv/ext/tasks/unix.rb
CHANGED
@@ -5,7 +5,7 @@ file 'ext/libuv/out' => 'ext/libuv/build/gyp' do
|
|
5
5
|
abort "Don't know how to build on #{FFI::Platform::ARCH} (yet)" unless target_arch
|
6
6
|
|
7
7
|
Dir.chdir("ext/libuv") do |path|
|
8
|
-
system "./gyp_uv -f make -Dtarget_arch=#{target_arch} -Dlibrary=shared_library -Dcomponent=shared_library"
|
8
|
+
system "./gyp_uv.py -f make -Dtarget_arch=#{target_arch} -Dlibrary=shared_library -Dcomponent=shared_library"
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
data/lib/libuv/ext/types.rb
CHANGED
@@ -9,11 +9,7 @@ module Libuv
|
|
9
9
|
require 'libuv/ext/platform/linux.rb' if FFI::Platform.linux?
|
10
10
|
require 'libuv/ext/platform/unix.rb' if FFI::Platform.unix?
|
11
11
|
require 'libuv/ext/platform/darwin_x64.rb' if FFI::Platform.mac? and FFI::Platform::ARCH == 'x86_64'
|
12
|
-
if FFI::Platform.windows?
|
13
|
-
require 'libuv/ext/platform/windows.rb'
|
14
|
-
else
|
15
|
-
attach_function :ntohs, [:ushort], :ushort, :blocking => true
|
16
|
-
end
|
12
|
+
require 'libuv/ext/platform/windows.rb' if FFI::Platform.windows?
|
17
13
|
|
18
14
|
enum :uv_handle_type, [
|
19
15
|
:uv_unknown_handle, 0,
|
@@ -92,8 +88,7 @@ module Libuv
|
|
92
88
|
:UV_RUN_NOWAIT
|
93
89
|
]
|
94
90
|
|
95
|
-
typedef UvBuf.
|
96
|
-
typedef UvFSStat.by_value, :uv_fs_stat_t
|
91
|
+
typedef UvBuf.by_ref, :uv_buf_t
|
97
92
|
|
98
93
|
|
99
94
|
class Sockaddr < FFI::Struct
|
@@ -114,7 +109,7 @@ module Libuv
|
|
114
109
|
:sin_zero, [:char, 8]
|
115
110
|
end
|
116
111
|
|
117
|
-
typedef SockaddrIn.
|
112
|
+
typedef SockaddrIn.by_ref, :sockaddr_in4
|
118
113
|
|
119
114
|
class U6Addr < FFI::Union
|
120
115
|
layout :__u6_addr8, [:uint8, 16],
|
@@ -134,7 +129,7 @@ module Libuv
|
|
134
129
|
:sin6_scope_id, :uint32
|
135
130
|
end
|
136
131
|
|
137
|
-
typedef SockaddrIn6.
|
132
|
+
typedef SockaddrIn6.by_ref, :sockaddr_in6
|
138
133
|
|
139
134
|
|
140
135
|
class UvTimespec < FFI::Struct
|
@@ -161,8 +156,7 @@ module Libuv
|
|
161
156
|
:st_birthtim, UvTimespec
|
162
157
|
end
|
163
158
|
|
164
|
-
typedef
|
165
|
-
|
159
|
+
typedef :pointer, :sockaddr_in
|
166
160
|
typedef :pointer, :uv_handle_t
|
167
161
|
typedef :pointer, :uv_fs_event_t
|
168
162
|
typedef :pointer, :uv_fs_poll_t
|
@@ -205,7 +199,7 @@ module Libuv
|
|
205
199
|
typedef :int, :events
|
206
200
|
typedef :int, :signal
|
207
201
|
|
208
|
-
callback :uv_alloc_cb, [:uv_handle_t, :size_t],
|
202
|
+
callback :uv_alloc_cb, [:uv_handle_t, :size_t, :uv_buf_t], :void
|
209
203
|
callback :uv_read_cb, [:uv_stream_t, :ssize_t, :uv_buf_t], :void
|
210
204
|
callback :uv_read2_cb, [:uv_pipe_t, :ssize_t, :uv_buf_t, :uv_handle_type], :void
|
211
205
|
callback :uv_write_cb, [:uv_write_t, :status], :void
|
@@ -227,9 +221,8 @@ module Libuv
|
|
227
221
|
callback :uv_after_work_cb, [:uv_work_t, :int], :void
|
228
222
|
callback :uv_fs_event_cb, [:uv_fs_event_t, :string, :int, :int], :void
|
229
223
|
callback :uv_fs_poll_cb, [:uv_fs_poll_t, :status, :uv_stat_t, :uv_stat_t], :void
|
230
|
-
#callback :uv_signal_cb, []
|
231
224
|
callback :uv_udp_send_cb, [:uv_udp_send_t, :int], :void
|
232
|
-
callback :uv_udp_recv_cb, [:uv_udp_t, :ssize_t, :uv_buf_t, Sockaddr, :uint], :void
|
225
|
+
callback :uv_udp_recv_cb, [:uv_udp_t, :ssize_t, :uv_buf_t, Sockaddr.by_ref, :uint], :void
|
233
226
|
callback :uv_cb, [], :void
|
234
227
|
end
|
235
228
|
end
|
data/lib/libuv/loop.rb
CHANGED
@@ -5,19 +5,22 @@ module Libuv
|
|
5
5
|
include Resource, Assertions
|
6
6
|
|
7
7
|
|
8
|
+
LOOPS = ThreadSafe::Cache.new
|
9
|
+
|
10
|
+
|
8
11
|
module ClassMethods
|
9
12
|
# Get default loop
|
10
13
|
#
|
11
14
|
# @return [::Libuv::Loop]
|
12
15
|
def default
|
13
|
-
create(::Libuv::Ext.default_loop)
|
16
|
+
return current || create(::Libuv::Ext.default_loop)
|
14
17
|
end
|
15
18
|
|
16
19
|
# Create new Libuv loop
|
17
20
|
#
|
18
21
|
# @return [::Libuv::Loop]
|
19
22
|
def new
|
20
|
-
create(::Libuv::Ext.loop_new)
|
23
|
+
return current || create(::Libuv::Ext.loop_new)
|
21
24
|
end
|
22
25
|
|
23
26
|
# Build a Ruby Libuv loop from an existing loop pointer
|
@@ -26,6 +29,13 @@ module Libuv
|
|
26
29
|
def create(pointer)
|
27
30
|
allocate.tap { |i| i.send(:initialize, FFI::AutoPointer.new(pointer, ::Libuv::Ext.method(:loop_delete))) }
|
28
31
|
end
|
32
|
+
|
33
|
+
# Checks for the existence of a loop on the current thread
|
34
|
+
#
|
35
|
+
# @return [::Libuv::Loop | nil]
|
36
|
+
def current
|
37
|
+
LOOPS[Thread.current]
|
38
|
+
end
|
29
39
|
end
|
30
40
|
extend ClassMethods
|
31
41
|
|
@@ -59,6 +69,8 @@ module Libuv
|
|
59
69
|
|
60
70
|
# Create an async call for ending the loop
|
61
71
|
@stop_loop = Async.new @loop do
|
72
|
+
LOOPS.delete(@reactor_thread)
|
73
|
+
@reactor_thread = nil
|
62
74
|
@process_queue.close
|
63
75
|
@stop_loop.close
|
64
76
|
@next_tick.close
|
@@ -75,17 +87,19 @@ module Libuv
|
|
75
87
|
# @yieldparam promise [::Libuv::Q::Promise] Yields a promise that can be used for logging unhandled
|
76
88
|
# exceptions on the loop.
|
77
89
|
def run(run_type = :UV_RUN_DEFAULT)
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
90
|
+
if @reactor_thread.nil?
|
91
|
+
@loop_notify = @loop.defer
|
92
|
+
|
93
|
+
begin
|
94
|
+
@reactor_thread = Thread.current
|
95
|
+
LOOPS[@reactor_thread] = @loop
|
96
|
+
yield @loop_notify.promise if block_given?
|
97
|
+
::Libuv::Ext.run(@pointer, run_type) # This is blocking
|
98
|
+
ensure
|
99
|
+
@reactor_thread = nil
|
100
|
+
@run_queue.clear
|
101
|
+
end
|
87
102
|
end
|
88
|
-
|
89
103
|
@loop
|
90
104
|
end
|
91
105
|
|
@@ -139,7 +153,7 @@ module Libuv
|
|
139
153
|
::Libuv::Ext.update_time(@pointer)
|
140
154
|
end
|
141
155
|
|
142
|
-
# Get current time in
|
156
|
+
# Get current time in milliseconds
|
143
157
|
#
|
144
158
|
# @return [Fixnum]
|
145
159
|
def now
|
@@ -204,15 +218,15 @@ module Libuv
|
|
204
218
|
# Get a new Prepare handle
|
205
219
|
#
|
206
220
|
# @return [::Libuv::Prepare]
|
207
|
-
def prepare
|
208
|
-
Prepare.new(@loop)
|
221
|
+
def prepare(callback = nil, &blk)
|
222
|
+
Prepare.new(@loop, callback || blk)
|
209
223
|
end
|
210
224
|
|
211
225
|
# Get a new Check handle
|
212
226
|
#
|
213
227
|
# @return [::Libuv::Check]
|
214
|
-
def check
|
215
|
-
Check.new(@loop)
|
228
|
+
def check(callback = nil, &blk)
|
229
|
+
Check.new(@loop, callback || blk)
|
216
230
|
end
|
217
231
|
|
218
232
|
# Get a new Idle handle
|
@@ -293,7 +307,7 @@ module Libuv
|
|
293
307
|
callback ||= block
|
294
308
|
assert_block(callback)
|
295
309
|
|
296
|
-
if
|
310
|
+
if reactor_thread?
|
297
311
|
block.call
|
298
312
|
else
|
299
313
|
@run_queue << callback
|
@@ -310,7 +324,7 @@ module Libuv
|
|
310
324
|
assert_block(callback)
|
311
325
|
|
312
326
|
@run_queue << callback
|
313
|
-
if
|
327
|
+
if reactor_thread?
|
314
328
|
# Create a next tick timer
|
315
329
|
if not @next_tick_scheduled
|
316
330
|
@next_tick.start(0)
|
@@ -334,5 +348,26 @@ module Libuv
|
|
334
348
|
def stop
|
335
349
|
@stop_loop.call
|
336
350
|
end
|
351
|
+
|
352
|
+
# True if the calling thread is the same thread as the reactor.
|
353
|
+
#
|
354
|
+
# @return [Boolean]
|
355
|
+
def reactor_thread?
|
356
|
+
@reactor_thread == Thread.current
|
357
|
+
end
|
358
|
+
|
359
|
+
# Exposed to allow joining on the thread, when run in a multithreaded environment. Performing other actions on the thread has undefined semantics (read: a dangerous endevor).
|
360
|
+
#
|
361
|
+
# @return [Thread]
|
362
|
+
def reactor_thread
|
363
|
+
@reactor_thread
|
364
|
+
end
|
365
|
+
|
366
|
+
# Tells you whether the Libuv reactor loop is currently running.
|
367
|
+
#
|
368
|
+
# @return [Boolean]
|
369
|
+
def reactor_running?
|
370
|
+
!@reactor_thread.nil?
|
371
|
+
end
|
337
372
|
end
|
338
373
|
end
|
data/lib/libuv/mixins/stream.rb
CHANGED
@@ -37,7 +37,7 @@ module Libuv
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def write(data)
|
40
|
-
# NOTE:: Similar to udp.rb ->
|
40
|
+
# NOTE:: Similar to udp.rb -> send
|
41
41
|
deferred = @loop.defer
|
42
42
|
if !@closed
|
43
43
|
begin
|
@@ -113,8 +113,9 @@ module Libuv
|
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
116
|
-
def on_allocate(client, suggested_size)
|
117
|
-
|
116
|
+
def on_allocate(client, suggested_size, buffer)
|
117
|
+
buffer[:len] = suggested_size
|
118
|
+
buffer[:base] = ::Libuv::Ext.malloc(suggested_size)
|
118
119
|
end
|
119
120
|
|
120
121
|
def on_read(handle, nread, buf)
|
@@ -123,10 +124,16 @@ module Libuv
|
|
123
124
|
|
124
125
|
if e
|
125
126
|
::Libuv::Ext.free(base)
|
126
|
-
|
127
|
+
# I assume this is desirable behaviour
|
128
|
+
if e.is_a? ::Libuv::Error::EOF
|
129
|
+
close # Close gracefully
|
130
|
+
else
|
131
|
+
reject(e)
|
132
|
+
end
|
127
133
|
else
|
128
134
|
data = base.read_string(nread)
|
129
135
|
::Libuv::Ext.free(base)
|
136
|
+
|
130
137
|
begin
|
131
138
|
@progress.call data, self
|
132
139
|
rescue Exception => e
|
data/lib/libuv/prepare.rb
CHANGED
@@ -9,7 +9,7 @@ module Libuv
|
|
9
9
|
@callback = callback || blk
|
10
10
|
|
11
11
|
prepare_ptr = ::Libuv::Ext.create_handle(:uv_prepare)
|
12
|
-
error = check_result(::Libuv::Ext.prepare_init(
|
12
|
+
error = check_result(::Libuv::Ext.prepare_init(loop.handle, prepare_ptr))
|
13
13
|
|
14
14
|
super(prepare_ptr, error)
|
15
15
|
end
|
data/lib/libuv/q.rb
CHANGED
@@ -146,6 +146,10 @@ module Libuv
|
|
146
146
|
|
147
147
|
result.promise
|
148
148
|
end
|
149
|
+
|
150
|
+
def resolved?
|
151
|
+
pending.nil?
|
152
|
+
end
|
149
153
|
|
150
154
|
|
151
155
|
private
|
@@ -181,14 +185,30 @@ module Libuv
|
|
181
185
|
|
182
186
|
@loop.next_tick {
|
183
187
|
if @error
|
184
|
-
|
188
|
+
begin
|
189
|
+
result.resolve(errback.nil? ? Q.reject(@loop, @response) : errback.call(@response))
|
190
|
+
rescue Exception => e
|
191
|
+
#warn "Unhandled exception: #{e.message}\n#{e.backtrace.join("\n")}\n"
|
192
|
+
result.reject(e)
|
193
|
+
@loop.log(:error, :q_reject_cb, e)
|
194
|
+
end
|
185
195
|
else
|
186
|
-
|
196
|
+
begin
|
197
|
+
result.resolve(callback.nil? ? @response : callback.call(@response))
|
198
|
+
rescue Exception => e
|
199
|
+
#warn "\nUnhandled exception: #{e.message}\n#{e.backtrace.join("\n")}\n"
|
200
|
+
result.reject(e)
|
201
|
+
@loop.log(:error, :q_resolve_cb, e)
|
202
|
+
end
|
187
203
|
end
|
188
204
|
}
|
189
205
|
|
190
206
|
result.promise
|
191
207
|
end
|
208
|
+
|
209
|
+
def resolved?
|
210
|
+
true
|
211
|
+
end
|
192
212
|
end
|
193
213
|
|
194
214
|
|
@@ -241,7 +261,8 @@ module Libuv
|
|
241
261
|
# Creates a promise object associated with this deferred
|
242
262
|
#
|
243
263
|
def promise
|
244
|
-
DeferredPromise.new(@loop, self)
|
264
|
+
@promise ||= DeferredPromise.new(@loop, self)
|
265
|
+
@promise # Should only ever be one per deferred
|
245
266
|
end
|
246
267
|
|
247
268
|
#
|
@@ -260,6 +281,10 @@ module Libuv
|
|
260
281
|
end
|
261
282
|
end
|
262
283
|
end
|
284
|
+
|
285
|
+
def resolved?
|
286
|
+
@pending.nil?
|
287
|
+
end
|
263
288
|
end
|
264
289
|
|
265
290
|
|
data/lib/libuv/tcp.rb
CHANGED
@@ -33,20 +33,28 @@ module Libuv
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
+
def open(fd, binding = true, callback = nil, &blk)
|
37
|
+
return if @closed
|
38
|
+
if binding
|
39
|
+
@on_listen = callback || blk
|
40
|
+
else
|
41
|
+
@callback = callback || blk
|
42
|
+
end
|
43
|
+
error = check_result UV.tcp_open(handle, fd)
|
44
|
+
reject(error) if error
|
45
|
+
end
|
46
|
+
|
36
47
|
def accept(callback = nil, &blk)
|
37
|
-
tcp = nil
|
38
48
|
begin
|
39
49
|
raise RuntimeError, CLOSED_HANDLE_ERROR if @closed
|
40
50
|
tcp = TCP.new(loop, handle)
|
41
|
-
rescue Exception => e
|
42
|
-
@loop.log :info, :tcp_accept_failed, e
|
43
|
-
end
|
44
|
-
if tcp
|
45
51
|
begin
|
46
52
|
(callback || blk).call(tcp)
|
47
53
|
rescue Exception => e
|
48
54
|
@loop.log :error, :tcp_accept_cb, e
|
49
55
|
end
|
56
|
+
rescue Exception => e
|
57
|
+
@loop.log :info, :tcp_accept_failed, e
|
50
58
|
end
|
51
59
|
nil
|
52
60
|
end
|
@@ -124,7 +132,11 @@ module Libuv
|
|
124
132
|
|
125
133
|
def on_connect(req, status)
|
126
134
|
::Libuv::Ext.free(req)
|
127
|
-
|
135
|
+
begin
|
136
|
+
@callback.call(self)
|
137
|
+
rescue Exception => e
|
138
|
+
@loop.log :error, :connect_cb, e
|
139
|
+
end
|
128
140
|
end
|
129
141
|
|
130
142
|
|
@@ -144,28 +156,12 @@ module Libuv
|
|
144
156
|
end
|
145
157
|
|
146
158
|
|
147
|
-
|
159
|
+
protected
|
148
160
|
|
149
161
|
|
150
162
|
def connect_req
|
151
163
|
::Libuv::Ext.create_request(:uv_connect)
|
152
164
|
end
|
153
|
-
end
|
154
|
-
|
155
|
-
|
156
|
-
class Socket4 < SocketBase
|
157
|
-
|
158
|
-
|
159
|
-
private
|
160
|
-
|
161
|
-
|
162
|
-
def ip_addr(ip, port)
|
163
|
-
::Libuv::Ext.ip4_addr(ip, port)
|
164
|
-
end
|
165
|
-
|
166
|
-
def tcp_bind
|
167
|
-
::Libuv::Ext.tcp_bind(@tcp, @sockaddr)
|
168
|
-
end
|
169
165
|
|
170
166
|
def tcp_connect(callback)
|
171
167
|
::Libuv::Ext.tcp_connect(
|
@@ -175,30 +171,33 @@ module Libuv
|
|
175
171
|
callback
|
176
172
|
)
|
177
173
|
end
|
178
|
-
end
|
179
|
-
|
180
174
|
|
181
|
-
|
175
|
+
def tcp_bind
|
176
|
+
::Libuv::Ext.tcp_bind(@tcp, @sockaddr)
|
177
|
+
end
|
178
|
+
end
|
182
179
|
|
183
180
|
|
184
|
-
|
181
|
+
class Socket4 < SocketBase
|
182
|
+
protected
|
185
183
|
|
186
184
|
|
187
185
|
def ip_addr(ip, port)
|
188
|
-
::
|
186
|
+
addr = Ext::SockaddrIn.new
|
187
|
+
check_result! ::Libuv::Ext.ip4_addr(ip, port, addr)
|
188
|
+
addr
|
189
189
|
end
|
190
|
+
end
|
190
191
|
|
191
|
-
def tcp_bind
|
192
|
-
::Libuv::Ext.tcp_bind6(@tcp, @sockaddr)
|
193
|
-
end
|
194
192
|
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
)
|
193
|
+
class Socket6 < SocketBase
|
194
|
+
protected
|
195
|
+
|
196
|
+
|
197
|
+
def ip_addr(ip, port)
|
198
|
+
addr = Ext::SockaddrIn6.new
|
199
|
+
check_result! ::Libuv::Ext.ip6_addr(ip, port, addr)
|
200
|
+
addr
|
202
201
|
end
|
203
202
|
end
|
204
203
|
end
|
data/lib/libuv/timer.rb
CHANGED
@@ -14,6 +14,7 @@ module Libuv
|
|
14
14
|
|
15
15
|
timer_ptr = ::Libuv::Ext.create_handle(:uv_timer)
|
16
16
|
error = check_result(::Libuv::Ext.timer_init(loop.handle, timer_ptr))
|
17
|
+
@stopped = true
|
17
18
|
|
18
19
|
super(timer_ptr, error)
|
19
20
|
end
|
@@ -24,7 +25,8 @@ module Libuv
|
|
24
25
|
# @param repeat [Fixnum] time in milliseconds between repeated callbacks after the first
|
25
26
|
def start(timeout, repeat = 0)
|
26
27
|
return if @closed
|
27
|
-
|
28
|
+
@stopped = false
|
29
|
+
|
28
30
|
assert_type(Integer, timeout, TIMEOUT_ERROR)
|
29
31
|
assert_type(Integer, repeat, REPEAT_ERROR)
|
30
32
|
|
@@ -34,7 +36,8 @@ module Libuv
|
|
34
36
|
|
35
37
|
# Disables the timer.
|
36
38
|
def stop
|
37
|
-
return if @closed
|
39
|
+
return if @stopped || @closed
|
40
|
+
@stopped = true
|
38
41
|
error = check_result ::Libuv::Ext.timer_stop(handle)
|
39
42
|
reject(error) if error
|
40
43
|
end
|
data/lib/libuv/udp.rb
CHANGED
@@ -19,17 +19,20 @@ module Libuv
|
|
19
19
|
super(udp_ptr, error)
|
20
20
|
end
|
21
21
|
|
22
|
-
def bind(ip, port
|
22
|
+
def bind(ip, port)
|
23
23
|
return if @closed
|
24
24
|
assert_type(String, ip, IP_ARGUMENT_ERROR)
|
25
25
|
assert_type(Integer, port, PORT_ARGUMENT_ERROR)
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
sockaddr = create_sockaddr(ip, port)
|
28
|
+
error = check_result ::Libuv::Ext.udp_bind(handle, sockaddr, 0)
|
29
|
+
reject(error) if error
|
30
|
+
end
|
31
|
+
|
32
|
+
def open(fd, binding = true, callback = nil, &blk)
|
33
|
+
return if @closed
|
34
|
+
error = check_result UV.udp_open(handle, fd)
|
35
|
+
reject(error) if error
|
33
36
|
end
|
34
37
|
|
35
38
|
def sockname
|
@@ -57,13 +60,17 @@ module Libuv
|
|
57
60
|
reject(error) if error
|
58
61
|
end
|
59
62
|
|
60
|
-
|
63
|
+
# Starts reading from the handle
|
64
|
+
# Renamed to match Stream
|
65
|
+
def start_read
|
61
66
|
return if @closed
|
62
67
|
error = check_result ::Libuv::Ext.udp_recv_start(handle, callback(:on_allocate), callback(:on_recv))
|
63
68
|
reject(error) if error
|
64
69
|
end
|
65
70
|
|
66
|
-
|
71
|
+
# Stops reading from the handle
|
72
|
+
# Renamed to match Stream
|
73
|
+
def stop_read
|
67
74
|
return if @closed
|
68
75
|
error = check_result ::Libuv::Ext.udp_recv_stop(handle)
|
69
76
|
reject(error) if error
|
@@ -78,10 +85,10 @@ module Libuv
|
|
78
85
|
assert_type(Integer, port, PORT_ARGUMENT_ERROR)
|
79
86
|
assert_type(String, data, SEND_DATA_ERROR)
|
80
87
|
|
81
|
-
|
88
|
+
sockaddr = create_sockaddr(ip, port)
|
82
89
|
|
83
90
|
# local as this variable will be avaliable until the handle is closed
|
84
|
-
@sent_callbacks
|
91
|
+
@sent_callbacks ||= []
|
85
92
|
|
86
93
|
#
|
87
94
|
# create the curried callback
|
@@ -97,16 +104,21 @@ module Libuv
|
|
97
104
|
#
|
98
105
|
# Save the callback and return the promise
|
99
106
|
#
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
107
|
+
@sent_callbacks << [deferred, callback]
|
108
|
+
error = check_result ::Libuv::Ext.udp_send(
|
109
|
+
send_req,
|
110
|
+
handle,
|
111
|
+
buf_init(data),
|
112
|
+
1,
|
113
|
+
sockaddr,
|
114
|
+
callback
|
115
|
+
)
|
116
|
+
if error
|
104
117
|
@sent_callbacks.pop
|
105
|
-
deferred.reject(
|
106
|
-
|
107
|
-
reject(e) # close the handle
|
118
|
+
deferred.reject(error)
|
119
|
+
reject(error) # close the handle
|
108
120
|
end
|
109
|
-
rescue
|
121
|
+
rescue StandardError => e
|
110
122
|
deferred.reject(e)
|
111
123
|
end
|
112
124
|
else
|
@@ -153,12 +165,39 @@ module Libuv
|
|
153
165
|
reject(error) if error
|
154
166
|
end
|
155
167
|
|
168
|
+
def progress(callback = nil, &blk)
|
169
|
+
@progress = callback || blk
|
170
|
+
end
|
171
|
+
|
156
172
|
|
157
173
|
private
|
158
174
|
|
159
175
|
|
160
|
-
def
|
161
|
-
::Libuv::Ext.
|
176
|
+
def send_req
|
177
|
+
::Libuv::Ext.create_request(:uv_udp_send)
|
178
|
+
end
|
179
|
+
|
180
|
+
def buf_init(data)
|
181
|
+
::Libuv::Ext.buf_init(FFI::MemoryPointer.from_string(data), data.respond_to?(:bytesize) ? data.bytesize : data.size)
|
182
|
+
end
|
183
|
+
|
184
|
+
def create_sockaddr(ip, port)
|
185
|
+
ips = IPAddr.new(ip)
|
186
|
+
if ips.ipv4?
|
187
|
+
addr = Ext::SockaddrIn.new
|
188
|
+
check_result! ::Libuv::Ext.ip4_addr(ip, port, addr)
|
189
|
+
addr
|
190
|
+
else
|
191
|
+
addr = Ext::SockaddrIn6.new
|
192
|
+
check_result! ::Libuv::Ext.ip6_addr(ip, port, addr)
|
193
|
+
addr
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
|
198
|
+
def on_allocate(client, suggested_size, buffer)
|
199
|
+
buffer[:len] = suggested_size
|
200
|
+
buffer[:base] = ::Libuv::Ext.malloc(suggested_size)
|
162
201
|
end
|
163
202
|
|
164
203
|
def on_recv(handle, nread, buf, sockaddr, flags)
|
@@ -174,100 +213,12 @@ module Libuv
|
|
174
213
|
unless sockaddr.null?
|
175
214
|
ip, port = get_ip_and_port(UV::Sockaddr.new(sockaddr))
|
176
215
|
end
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
Socket4.new(@loop, handle, ip, port)
|
184
|
-
else
|
185
|
-
Socket6.new(@loop, handle, ip, port)
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
|
190
|
-
module SocketMethods
|
191
|
-
include Resource
|
192
|
-
|
193
|
-
def initialize(loop, udp, ip, port)
|
194
|
-
@loop, @udp, @sockaddr = loop, udp, ip_addr(ip.to_s, port)
|
195
|
-
end
|
196
|
-
|
197
|
-
def bind(ipv6_only = false)
|
198
|
-
check_result! udp_bind(ipv6_only)
|
199
|
-
end
|
200
|
-
|
201
|
-
def send(data, callback)
|
202
|
-
check_result! udp_send(data, callback)
|
203
|
-
end
|
204
|
-
|
205
|
-
|
206
|
-
private
|
207
|
-
|
208
|
-
|
209
|
-
def send_req
|
210
|
-
::Libuv::Ext.create_request(:uv_udp_send)
|
211
|
-
end
|
212
|
-
|
213
|
-
def buf_init(data)
|
214
|
-
::Libuv::Ext.buf_init(FFI::MemoryPointer.from_string(data), data.respond_to?(:bytesize) ? data.bytesize : data.size)
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
|
219
|
-
class Socket4
|
220
|
-
include SocketMethods
|
221
|
-
|
222
|
-
|
223
|
-
private
|
224
|
-
|
225
|
-
|
226
|
-
def ip_addr(ip, port)
|
227
|
-
::Libuv::Ext.ip4_addr(ip, port)
|
228
|
-
end
|
229
|
-
|
230
|
-
def udp_bind(ipv6_only)
|
231
|
-
::Libuv::Ext.udp_bind(@udp, @sockaddr, 0)
|
232
|
-
end
|
233
|
-
|
234
|
-
def udp_send(data, callback)
|
235
|
-
::Libuv::Ext.udp_send(
|
236
|
-
send_req,
|
237
|
-
@udp,
|
238
|
-
buf_init(data),
|
239
|
-
1,
|
240
|
-
@sockaddr,
|
241
|
-
callback
|
242
|
-
)
|
243
|
-
end
|
244
|
-
end
|
245
|
-
|
246
|
-
|
247
|
-
class Socket6 < Socket
|
248
|
-
include SocketMethods
|
249
|
-
|
250
|
-
|
251
|
-
private
|
252
|
-
|
253
|
-
|
254
|
-
def ip_addr(ip, port)
|
255
|
-
::Libuv::Ext.ip6_addr(ip, port)
|
256
|
-
end
|
257
|
-
|
258
|
-
def udp_bind(ipv6_only)
|
259
|
-
::Libuv::Ext.udp_bind6(@udp, @sockaddr, ipv6_only ? 1 : 0)
|
260
|
-
end
|
261
|
-
|
262
|
-
def udp_send(data, callback)
|
263
|
-
::Libuv::Ext.udp_send6(
|
264
|
-
send_req,
|
265
|
-
@udp,
|
266
|
-
buf_init(data),
|
267
|
-
1,
|
268
|
-
@sockaddr,
|
269
|
-
callback
|
270
|
-
)
|
216
|
+
|
217
|
+
begin
|
218
|
+
@progress.call data, ip, port, self
|
219
|
+
rescue Exception => e
|
220
|
+
@loop.log :error, :udp_progress_cb, e
|
221
|
+
end
|
271
222
|
end
|
272
223
|
end
|
273
224
|
end
|
data/lib/libuv/version.rb
CHANGED
data/lib/libuv/work.rb
CHANGED
@@ -3,6 +3,10 @@ module Libuv
|
|
3
3
|
include Resource, Listener
|
4
4
|
|
5
5
|
|
6
|
+
attr_reader :error
|
7
|
+
attr_reader :result
|
8
|
+
|
9
|
+
|
6
10
|
# @param loop [::Libuv::Loop] loop this work request will be associated
|
7
11
|
# @param work [Proc] callback to be called in the thread pool
|
8
12
|
def initialize(loop, work)
|
@@ -46,16 +50,21 @@ module Libuv
|
|
46
50
|
@complete = true
|
47
51
|
::Libuv::Ext.free(req)
|
48
52
|
|
49
|
-
|
50
|
-
|
53
|
+
e = check_result(status)
|
54
|
+
if e
|
55
|
+
@defer.reject(e)
|
51
56
|
else
|
52
|
-
|
57
|
+
if @error
|
58
|
+
@defer.reject(@error)
|
59
|
+
else
|
60
|
+
@defer.resolve(@result)
|
61
|
+
end
|
53
62
|
end
|
54
63
|
end
|
55
64
|
|
56
65
|
def on_work(req)
|
57
66
|
begin
|
58
|
-
@work.call
|
67
|
+
@result = @work.call
|
59
68
|
rescue Exception => e
|
60
69
|
@error = e # Catch errors for promise resolution
|
61
70
|
end
|
data/spec/filesystem_spec.rb
CHANGED
@@ -17,9 +17,9 @@ describe Libuv::Filesystem do
|
|
17
17
|
|
18
18
|
@logger = proc { |level, errorid, error|
|
19
19
|
begin
|
20
|
-
|
20
|
+
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
21
21
|
rescue Exception
|
22
|
-
|
22
|
+
@general_failure << 'error in logger'
|
23
23
|
end
|
24
24
|
}
|
25
25
|
|
@@ -106,10 +106,15 @@ describe Libuv::Filesystem do
|
|
106
106
|
@loop.run { |logger|
|
107
107
|
logger.progress &@logger
|
108
108
|
|
109
|
-
@loop.filesystem.unlink(@thefile)
|
109
|
+
op = @loop.filesystem.unlink(@thefile)
|
110
|
+
op.then do
|
110
111
|
@loop.stop
|
111
112
|
@log = :success
|
112
113
|
end
|
114
|
+
op.catch do |error|
|
115
|
+
@general_failure << error
|
116
|
+
@loop.stop
|
117
|
+
end
|
113
118
|
}
|
114
119
|
|
115
120
|
@general_failure.should == []
|
data/spec/pipe_spec.rb
CHANGED
@@ -15,11 +15,11 @@ describe Libuv::Pipe do
|
|
15
15
|
end
|
16
16
|
@timeout.start(5000)
|
17
17
|
|
18
|
-
@pipefile = "/tmp/test-
|
18
|
+
@pipefile = "/tmp/test-pipes.pipe"
|
19
19
|
|
20
20
|
@loop.all(@server, @client, @timeout).catch do |reason|
|
21
21
|
@general_failure << reason.inspect
|
22
|
-
|
22
|
+
@general_failure << "Failed with: #{reason.message}\n#{reason.backtrace}\n"
|
23
23
|
end
|
24
24
|
|
25
25
|
begin
|
@@ -41,9 +41,9 @@ describe Libuv::Pipe do
|
|
41
41
|
@loop.run { |logger|
|
42
42
|
logger.progress do |level, errorid, error|
|
43
43
|
begin
|
44
|
-
|
44
|
+
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace}\n"
|
45
45
|
rescue Exception
|
46
|
-
|
46
|
+
@general_failure << 'error in logger'
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
@@ -62,7 +62,7 @@ describe Libuv::Pipe do
|
|
62
62
|
@general_failure << reason.inspect
|
63
63
|
@loop.stop
|
64
64
|
|
65
|
-
|
65
|
+
@general_failure << "Failed with: #{reason.message}\n#{reason.backtrace}\n"
|
66
66
|
end
|
67
67
|
|
68
68
|
# start listening
|
@@ -82,6 +82,13 @@ describe Libuv::Pipe do
|
|
82
82
|
@client.write('ping')
|
83
83
|
end
|
84
84
|
|
85
|
+
@client.catch do |reason|
|
86
|
+
@general_failure << reason.inspect
|
87
|
+
@loop.stop
|
88
|
+
|
89
|
+
@general_failure << "Failed with: #{reason.message}\n#{reason.backtrace}\n"
|
90
|
+
end
|
91
|
+
|
85
92
|
# Stop the loop once the client handle is closed
|
86
93
|
@client.finally do
|
87
94
|
@server.close
|
@@ -94,8 +101,8 @@ describe Libuv::Pipe do
|
|
94
101
|
end
|
95
102
|
end
|
96
103
|
|
97
|
-
# This test won't pass on
|
98
|
-
describe 'unidirectional pipeline' do
|
104
|
+
# This test won't pass on windows as pipes don't work like this on windows
|
105
|
+
describe 'unidirectional pipeline', :unix_only => true do
|
99
106
|
before :each do
|
100
107
|
system "/usr/bin/mkfifo", @pipefile
|
101
108
|
end
|
@@ -103,7 +110,7 @@ describe Libuv::Pipe do
|
|
103
110
|
it "should send work to a consumer" do
|
104
111
|
@loop.run { |logger|
|
105
112
|
logger.progress do |level, errorid, error|
|
106
|
-
|
113
|
+
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
107
114
|
end
|
108
115
|
|
109
116
|
|
@@ -120,7 +127,7 @@ describe Libuv::Pipe do
|
|
120
127
|
end
|
121
128
|
end
|
122
129
|
@file1.catch do |e|
|
123
|
-
|
130
|
+
@general_failure << "Log called: #{e.inspect} - #{e.message}\n"
|
124
131
|
end
|
125
132
|
|
126
133
|
@file2 = @loop.file(@pipefile, File::RDWR|File::NONBLOCK)
|
data/spec/tcp_spec.rb
CHANGED
@@ -35,9 +35,9 @@ describe Libuv::TCP do
|
|
35
35
|
@loop.run { |logger|
|
36
36
|
logger.progress do |level, errorid, error|
|
37
37
|
begin
|
38
|
-
|
38
|
+
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
39
39
|
rescue Exception
|
40
|
-
|
40
|
+
@general_failure << 'error in logger'
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
@@ -98,9 +98,9 @@ describe Libuv::TCP do
|
|
98
98
|
@loop.run { |logger|
|
99
99
|
logger.progress do |level, errorid, error|
|
100
100
|
begin
|
101
|
-
|
101
|
+
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
102
102
|
rescue Exception
|
103
|
-
|
103
|
+
@general_failure << 'error in logger'
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
@@ -167,9 +167,9 @@ describe Libuv::TCP do
|
|
167
167
|
@loop2.run do |logger|
|
168
168
|
logger.progress do |level, errorid, error|
|
169
169
|
begin
|
170
|
-
|
170
|
+
@general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
|
171
171
|
rescue Exception
|
172
|
-
|
172
|
+
@general_failure << 'error in logger'
|
173
173
|
end
|
174
174
|
end
|
175
175
|
|
metadata
CHANGED
@@ -1,97 +1,86 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libuv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
version: 0.10.2
|
4
|
+
version: 0.10.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Bulat Shakirzyanov
|
9
8
|
- Stephen von Takach
|
10
|
-
autorequire:
|
9
|
+
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date: 2013-
|
12
|
+
date: 2013-11-06 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: ffi
|
17
|
-
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
18
17
|
requirements:
|
19
|
-
- -
|
18
|
+
- - ">="
|
20
19
|
- !ruby/object:Gem::Version
|
21
20
|
version: '1.9'
|
22
|
-
|
23
|
-
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '1.9'
|
28
|
-
none: false
|
29
|
-
prerelease: false
|
30
|
-
type: :runtime
|
31
28
|
- !ruby/object:Gem::Dependency
|
32
29
|
name: thread_safe
|
33
|
-
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
34
31
|
requirements:
|
35
|
-
- -
|
32
|
+
- - ">="
|
36
33
|
- !ruby/object:Gem::Version
|
37
34
|
version: '0'
|
38
|
-
|
39
|
-
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
38
|
requirements:
|
41
|
-
- -
|
39
|
+
- - ">="
|
42
40
|
- !ruby/object:Gem::Version
|
43
41
|
version: '0'
|
44
|
-
none: false
|
45
|
-
prerelease: false
|
46
|
-
type: :runtime
|
47
42
|
- !ruby/object:Gem::Dependency
|
48
43
|
name: rspec
|
49
|
-
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
50
45
|
requirements:
|
51
|
-
- -
|
46
|
+
- - ">="
|
52
47
|
- !ruby/object:Gem::Version
|
53
48
|
version: '2.14'
|
54
|
-
|
55
|
-
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
56
52
|
requirements:
|
57
|
-
- -
|
53
|
+
- - ">="
|
58
54
|
- !ruby/object:Gem::Version
|
59
55
|
version: '2.14'
|
60
|
-
none: false
|
61
|
-
prerelease: false
|
62
|
-
type: :development
|
63
56
|
- !ruby/object:Gem::Dependency
|
64
57
|
name: rake
|
65
|
-
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
66
59
|
requirements:
|
67
|
-
- -
|
60
|
+
- - ">="
|
68
61
|
- !ruby/object:Gem::Version
|
69
62
|
version: '10.1'
|
70
|
-
|
71
|
-
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
72
66
|
requirements:
|
73
|
-
- -
|
67
|
+
- - ">="
|
74
68
|
- !ruby/object:Gem::Version
|
75
69
|
version: '10.1'
|
76
|
-
none: false
|
77
|
-
prerelease: false
|
78
|
-
type: :development
|
79
70
|
- !ruby/object:Gem::Dependency
|
80
71
|
name: yard
|
81
|
-
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
82
73
|
requirements:
|
83
|
-
- -
|
74
|
+
- - ">="
|
84
75
|
- !ruby/object:Gem::Version
|
85
76
|
version: '0'
|
86
|
-
|
87
|
-
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
88
80
|
requirements:
|
89
|
-
- -
|
81
|
+
- - ">="
|
90
82
|
- !ruby/object:Gem::Version
|
91
83
|
version: '0'
|
92
|
-
none: false
|
93
|
-
prerelease: false
|
94
|
-
type: :development
|
95
84
|
description: An opinionated wrapper around libuv for Ruby
|
96
85
|
email:
|
97
86
|
- mallluhuct@gmail.com
|
@@ -101,10 +90,10 @@ extensions:
|
|
101
90
|
- ext/Rakefile
|
102
91
|
extra_rdoc_files: []
|
103
92
|
files:
|
104
|
-
- .gitignore
|
105
|
-
- .gitmodules
|
106
|
-
- .rspec
|
107
|
-
- .travis.yml
|
93
|
+
- ".gitignore"
|
94
|
+
- ".gitmodules"
|
95
|
+
- ".rspec"
|
96
|
+
- ".travis.yml"
|
108
97
|
- Gemfile
|
109
98
|
- LICENSE
|
110
99
|
- README.md
|
@@ -168,7 +157,7 @@ files:
|
|
168
157
|
- ext/libuv/checksparse.sh
|
169
158
|
- ext/libuv/common.gypi
|
170
159
|
- ext/libuv/configure.ac
|
171
|
-
- ext/libuv/gyp_uv
|
160
|
+
- ext/libuv/gyp_uv.py
|
172
161
|
- ext/libuv/include/pthread-fixes.h
|
173
162
|
- ext/libuv/include/stdint-msvc2008.h
|
174
163
|
- ext/libuv/include/tree.h
|
@@ -187,6 +176,7 @@ files:
|
|
187
176
|
- ext/libuv/src/queue.h
|
188
177
|
- ext/libuv/src/unix/aix.c
|
189
178
|
- ext/libuv/src/unix/async.c
|
179
|
+
- ext/libuv/src/unix/atomic-ops.h
|
190
180
|
- ext/libuv/src/unix/core.c
|
191
181
|
- ext/libuv/src/unix/darwin-proctitle.c
|
192
182
|
- ext/libuv/src/unix/darwin.c
|
@@ -211,6 +201,7 @@ files:
|
|
211
201
|
- ext/libuv/src/unix/proctitle.c
|
212
202
|
- ext/libuv/src/unix/pthread-fixes.c
|
213
203
|
- ext/libuv/src/unix/signal.c
|
204
|
+
- ext/libuv/src/unix/spinlock.h
|
214
205
|
- ext/libuv/src/unix/stream.c
|
215
206
|
- ext/libuv/src/unix/sunos.c
|
216
207
|
- ext/libuv/src/unix/tcp.c
|
@@ -292,6 +283,7 @@ files:
|
|
292
283
|
- ext/libuv/test/test-barrier.c
|
293
284
|
- ext/libuv/test/test-callback-order.c
|
294
285
|
- ext/libuv/test/test-callback-stack.c
|
286
|
+
- ext/libuv/test/test-close-order.c
|
295
287
|
- ext/libuv/test/test-condvar.c
|
296
288
|
- ext/libuv/test/test-connection-fail.c
|
297
289
|
- ext/libuv/test/test-cwd-and-chdir.c
|
@@ -366,34 +358,32 @@ files:
|
|
366
358
|
- ext/libuv/test/test-udp-open.c
|
367
359
|
- ext/libuv/test/test-udp-options.c
|
368
360
|
- ext/libuv/test/test-udp-send-and-recv.c
|
369
|
-
- ext/libuv/test/test-util.c
|
370
361
|
- ext/libuv/test/test-walk-handles.c
|
371
362
|
- ext/libuv/uv.gyp
|
372
363
|
- ext/libuv/vcbuild.bat
|
373
364
|
homepage: https://github.com/cotag/libuv
|
374
365
|
licenses:
|
375
366
|
- MIT
|
376
|
-
|
367
|
+
metadata: {}
|
368
|
+
post_install_message:
|
377
369
|
rdoc_options: []
|
378
370
|
require_paths:
|
379
371
|
- lib
|
380
372
|
required_ruby_version: !ruby/object:Gem::Requirement
|
381
373
|
requirements:
|
382
|
-
- -
|
374
|
+
- - ">="
|
383
375
|
- !ruby/object:Gem::Version
|
384
376
|
version: 1.9.2
|
385
|
-
none: false
|
386
377
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
387
378
|
requirements:
|
388
|
-
- -
|
379
|
+
- - ">="
|
389
380
|
- !ruby/object:Gem::Version
|
390
381
|
version: '0'
|
391
|
-
none: false
|
392
382
|
requirements: []
|
393
|
-
rubyforge_project:
|
394
|
-
rubygems_version:
|
395
|
-
signing_key:
|
396
|
-
specification_version:
|
383
|
+
rubyforge_project:
|
384
|
+
rubygems_version: 2.0.3
|
385
|
+
signing_key:
|
386
|
+
specification_version: 4
|
397
387
|
summary: libuv bindings for Ruby
|
398
388
|
test_files:
|
399
389
|
- spec/async_spec.rb
|
@@ -403,4 +393,4 @@ test_files:
|
|
403
393
|
- spec/idle_spec.rb
|
404
394
|
- spec/pipe_spec.rb
|
405
395
|
- spec/tcp_spec.rb
|
406
|
-
has_rdoc:
|
396
|
+
has_rdoc:
|