libuv 0.10.2 → 0.10.3
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|