libuv 3.0.0 → 3.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 328790a2659803772fb2ca5891889bda349b47fd
4
- data.tar.gz: 0b534aaeeb7fd1fbfd11c35090e8f048be6db411
3
+ metadata.gz: b10a0bc452c1191da75b68559a2938ac09284f85
4
+ data.tar.gz: 60d8591279de58b4de765a46ecf3e4352f271fd0
5
5
  SHA512:
6
- metadata.gz: 00f0aed38c13defc6a2e310a67e81f576fad3d90308d00575982794e4bad6d0f95204b20d5f66db130984e22223c616bc02f78b3ffbefcc2d623c8efec9b1516
7
- data.tar.gz: da08a1d126e8d25dd0bb8fa8d0deb3a25d05a369725362d2aa5a4fbf5254aa2d5db7f6ec7f10c8b70ad2f24f2f6924018c59259276e83fa4d22eae58554a4599
6
+ metadata.gz: 9385371508feaf33ba6a28b3566063746383f540f6959a8466cc05188874b29ba69ecfba96ee9cf038ef23bf814e990d51fe6f4e06f9f7282481fc3595f92ec7
7
+ data.tar.gz: 10d0fc2affa3b408ec867d769dea18fcead4c17f49fa73802e58718785cab5cabff58a9d45f88d6e2c4bb6e2414e4dbcf24770435889770cc6cf941a592c1715
@@ -28,10 +28,12 @@ module Libuv
28
28
 
29
29
 
30
30
  begin
31
+ lib_path = ::File.expand_path('../', path_to_internal_libuv)
32
+
31
33
  # bias the library discovery to a path inside the gem first, then
32
34
  # to the usual system paths
33
35
  paths = [
34
- ::File.expand_path('../', path_to_internal_libuv),
36
+ lib_path,
35
37
  '/usr/local/lib',
36
38
  '/opt/local/lib',
37
39
  '/usr/lib64'
@@ -42,7 +44,16 @@ module Libuv
42
44
  # Primarily a dev platform so that is OK
43
45
  paths.unshift "#{ENV['HOME']}/lib"
44
46
  elsif FFI::Platform.windows?
45
- # TODO:: AddDllDirectory function to point to path_to_internal_libuv
47
+ module Kernel32
48
+ extend FFI::Library
49
+ ffi_lib 'Kernel32'
50
+
51
+ attach_function :add_dll_dir, :AddDllDirectory,
52
+ [ :buffer_in ], :pointer
53
+ end
54
+ # This ensures that externally loaded libraries like the libcouchbase gem
55
+ # will always use the same binary image and not load a second into memory
56
+ Kernel32.add_dll_dir "#{lib_path}\0".encode("UTF-16LE")
46
57
  else # UNIX
47
58
  # TODO:: ??
48
59
  end
@@ -8,7 +8,6 @@ module Libuv
8
8
  extend Accessors
9
9
 
10
10
 
11
- REACTORS = ::Concurrent::Map.new
12
11
  CRITICAL = ::Mutex.new
13
12
 
14
13
 
@@ -47,7 +46,7 @@ module Libuv
47
46
  #
48
47
  # @return [::Libuv::Reactor | nil]
49
48
  def current
50
- REACTORS[Thread.current]
49
+ Thread.current.thread_variable_get(:reactor)
51
50
  end
52
51
  end
53
52
  extend ClassMethods
@@ -89,7 +88,7 @@ module Libuv
89
88
 
90
89
  # Notify of errors
91
90
  @throw_on_exit = nil
92
- @reactor_notify = proc { |error|
91
+ @reactor_notify_default = @reactor_notify = proc { |error|
93
92
  @throw_on_exit = error
94
93
  }
95
94
  end
@@ -103,8 +102,8 @@ module Libuv
103
102
  def noop; end
104
103
 
105
104
  def stop_cb
106
- REACTORS.delete(@reactor_thread)
107
- @reactor_thread = nil
105
+ Thread.current.thread_variable_set(:reactor, nil)
106
+ @reactor_running = false
108
107
 
109
108
  ::Libuv::Ext.stop(@pointer)
110
109
  end
@@ -157,12 +156,12 @@ module Libuv
157
156
  # @yieldparam promise [::Libuv::Q::Promise] Yields a promise that can be used for logging unhandled
158
157
  # exceptions on the reactor.
159
158
  def run(run_type = :UV_RUN_DEFAULT)
160
- if @reactor_thread.nil?
159
+ if not @reactor_running
161
160
  begin
162
- @reactor_thread = ::Thread.current
163
- raise 'only one reactor allowed per-thread' if REACTORS[@reactor_thread]
161
+ @reactor_running = true
162
+ raise 'only one reactor allowed per-thread' if Thread.current.thread_variable_get(:reactor)
164
163
 
165
- REACTORS[@reactor_thread] = @reactor
164
+ Thread.current.thread_variable_set(:reactor, @reactor)
166
165
  @throw_on_exit = nil
167
166
 
168
167
  if block_given?
@@ -178,8 +177,8 @@ module Libuv
178
177
  @run_count += 1
179
178
  ::Libuv::Ext.run(@pointer, run_type) # This is blocking
180
179
  ensure
181
- REACTORS.delete(@reactor_thread)
182
- @reactor_thread = nil
180
+ Thread.current.thread_variable_set(:reactor, nil)
181
+ @reactor_running = false
183
182
  @run_queue.clear
184
183
  end
185
184
 
@@ -219,7 +218,7 @@ module Libuv
219
218
  #
220
219
  # @return [::Libuv::Q::Promise]
221
220
  def notifier(callback = nil, &blk)
222
- @reactor_notify = callback || blk
221
+ @reactor_notify = callback || blk || @reactor_notify_default
223
222
  self
224
223
  end
225
224
 
@@ -263,7 +262,13 @@ module Libuv
263
262
  def finally(*promises)
264
263
  Q.finally(@reactor, *promises)
265
264
  end
266
-
265
+
266
+ # Creates a promise that is resolved as rejected with the specified reason. This api should be
267
+ # used to forward rejection in a chain of promises. If you are dealing with the last promise in
268
+ # a promise chain, you don't need to worry about it.
269
+ def reject(reason)
270
+ Q.reject(@reactor, reason)
271
+ end
267
272
 
268
273
  # forces reactor time update, useful for getting more granular times
269
274
  #
@@ -507,19 +512,14 @@ module Libuv
507
512
  #
508
513
  # @return [Boolean]
509
514
  def reactor_thread?
510
- @reactor_thread == ::Thread.current
515
+ self == Thread.current.thread_variable_get(:reactor)
511
516
  end
512
517
 
513
- # 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).
514
- #
515
- # @return [Thread]
516
- attr_reader :reactor_thread
517
-
518
518
  # Tells you whether the Libuv reactor reactor is currently running.
519
519
  #
520
520
  # @return [Boolean]
521
521
  def reactor_running?
522
- !@reactor_thread.nil?
522
+ @reactor_running
523
523
  end
524
524
  alias_method :running?, :reactor_running?
525
525
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Libuv
4
- VERSION = '3.0.0'
4
+ VERSION = '3.0.1'
5
5
  end
@@ -16,19 +16,24 @@ describe Libuv::Async do
16
16
 
17
17
  @reactor.all(@server, @client, @timeout).catch do |reason|
18
18
  @general_failure << reason.inspect
19
- p "Failed with: #{reason.message}\n#{reason.backtrace.join("\n")}\n"
19
+ puts "Failed with: #{reason.message}\n#{reason.backtrace.join("\n")}\n"
20
+ end
21
+
22
+ @reactor.notifier do |error, context|
23
+ begin
24
+ puts "Log called: #{context}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
25
+ rescue Exception
26
+ puts 'error in logger'
27
+ end
20
28
  end
21
29
  end
30
+
31
+ after :each do
32
+ @reactor.notifier
33
+ end
22
34
 
23
35
  it "Should call the async function from the thread pool stopping the counter" do
24
36
  @reactor.run { |reactor|
25
- reactor.notifier do |error, context|
26
- begin
27
- p "Log called: #{context}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
28
- rescue Exception
29
- p 'error in logger'
30
- end
31
- end
32
37
 
33
38
  @count = 0
34
39
 
@@ -5,6 +5,7 @@ describe Libuv::Q do
5
5
 
6
6
  before :each do
7
7
  @reactor = Libuv::Reactor.default
8
+ @reactor.notifier {}
8
9
  @deferred = @reactor.defer
9
10
  @promise = @deferred.promise
10
11
  @log = []
@@ -12,6 +13,10 @@ describe Libuv::Q do
12
13
  @reactor.stop
13
14
  }
14
15
  end
16
+
17
+ after :each do
18
+ @reactor.notifier
19
+ end
15
20
 
16
21
 
17
22
  describe 'resolve' do
@@ -9,9 +9,9 @@ describe Libuv::Dns do
9
9
  @reactor = Libuv::Reactor.default
10
10
  @reactor.notifier do |error, context|
11
11
  begin
12
- p "Log called: #{context}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
12
+ puts "Log called: #{context}\n#{error.message}\n#{error.backtrace.join("\n")}\n"
13
13
  rescue Exception
14
- p 'error in logger'
14
+ puts 'error in logger'
15
15
  end
16
16
  end
17
17
  @timeout = @reactor.timer do
@@ -22,9 +22,13 @@ describe Libuv::Dns do
22
22
 
23
23
  @reactor.all(@server, @client, @timeout).catch do |reason|
24
24
  @general_failure << reason.inspect
25
- p "Failed with: #{reason.message}\n#{reason.backtrace.join("\n")}\n"
25
+ puts "Failed with: #{reason.message}\n#{reason.backtrace.join("\n")}\n"
26
26
  end
27
27
  end
28
+
29
+ after :each do
30
+ @reactor.notifier
31
+ end
28
32
 
29
33
  it "should resolve localhost using IP4", :network => true do
30
34
  @reactor.run { |reactor|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libuv
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen von Takach
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-20 00:00:00.000000000 Z
11
+ date: 2016-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi