uv-rays 2.4.6 → 2.4.7

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
- SHA1:
3
- metadata.gz: 3a91e56b903ef1b846c68c6767f21a08fb4a1006
4
- data.tar.gz: a56ddf829bcc85cd2f827576a84aadadeb8dc912
2
+ SHA256:
3
+ metadata.gz: 47a75f7ad78665269e270dc125d92b9c72c57375a3c6cb2c706d8c03b2b80748
4
+ data.tar.gz: df2eef272ef2b7778eb24440f6b1526881eb361fd4f0118ae63995c0d0c54ad7
5
5
  SHA512:
6
- metadata.gz: 284d7f5e131d15b096a876014c43d38cc2710d054676560ae1561108ee6b69964d0f38cd13c6e3ab4ccd27ad322b28c3df82bf283495ae06b365c1a0cd90ee71
7
- data.tar.gz: 541392cb4958db21654c2d378bca79dda0eac86d482fd0e5d3c951927c2d11439cddd9ebd95f8047ed55164e7091ad5c3ff06db749532862528f5a43a03710f6
6
+ metadata.gz: de3157500008ced5a6a5e2a980033acadb4243a9aa78243947e0227024df65123e0abbb6fef36d9c30fadb397cc609207dc511a61b12f17c142fb327c6be798c
7
+ data.tar.gz: 432b658361131fa76d68e445ad91a84aef4db530d428874b9a2ba326a6e85ba14db59562b8b1464438049a4f6a19865a562a766a918114595bf484a47233f8ec
@@ -163,6 +163,9 @@ module UV
163
163
  @tls = @scheme == 'https'
164
164
  @cookiejar = CookieJar.new
165
165
  @middleware = []
166
+
167
+ @closing = false
168
+ @connecting = false
166
169
  end
167
170
 
168
171
 
@@ -190,15 +193,18 @@ module UV
190
193
  if response.keep_alive
191
194
  restart_timer
192
195
  else
193
- close_connection
196
+ # We might have already started processing the next request
197
+ # at this point. So don't want to disconnect if already
198
+ # disconnected.
199
+ close_connection unless @connecting
194
200
  end
195
201
 
196
202
  next_request
197
203
 
198
204
  response
199
205
  }, proc { |err|
200
- @parser.eof
201
- close_connection
206
+ # @parser.eof
207
+ close_connection unless @connecting
202
208
  next_request
203
209
  ::Libuv::Q.reject(@thread, err)
204
210
  })
@@ -211,6 +217,10 @@ module UV
211
217
 
212
218
  # Callbacks
213
219
  def connection_ready
220
+ # A connection can be closed while still connecting
221
+ return if @closing
222
+
223
+ @connecting = false
214
224
  if @queue.length > 0
215
225
  restart_timer
216
226
  next_request
@@ -220,16 +230,23 @@ module UV
220
230
  end
221
231
 
222
232
  def connection_closed(request, reason)
233
+ # A connection might close due to a connection failure
234
+ awaiting_close = @closing
235
+ awaiting_connect = @connecting
236
+ @closing = false
237
+ @connecting = false
238
+ @connection = nil
239
+
223
240
  # We may have closed a previous connection
224
241
  if @parser.request && (request.nil? || request == @parser.request)
225
- @connection = nil
226
242
  stop_timer
227
-
228
243
  @parser.eof
229
244
  elsif request.nil? && @parser.request.nil? && @queue.length > 0
230
245
  req = @queue.pop
231
246
  req.reject(reason || :connection_failure)
232
247
  end
248
+
249
+ next_request if awaiting_close || awaiting_connect
233
250
  end
234
251
 
235
252
  def data_received(data)
@@ -258,6 +275,8 @@ module UV
258
275
 
259
276
 
260
277
  def next_request
278
+ # Don't start a request while transitioning state
279
+ return if @closing || @connecting
261
280
  return if @parser.request || @queue.length == 0
262
281
 
263
282
  if @connection
@@ -272,7 +291,10 @@ module UV
272
291
  end
273
292
 
274
293
  def new_connection
294
+ # no new connections while transitioning state
295
+ return if @closing || @connecting
275
296
  if @queue.length > 0 && @connection.nil?
297
+ @connecting = true
276
298
  @connection = Connection.new(@host, @port, @tls, @proxy, self)
277
299
  start_timer
278
300
  end
@@ -280,14 +302,17 @@ module UV
280
302
  end
281
303
 
282
304
  def close_connection
283
- return if @connection.nil?
284
- @connection.close_connection(@parser.request)
305
+ # Close connection can be called while connecting
306
+ return if @closing || @connection.nil?
307
+ @closing = true
308
+ @connection.close_connection
285
309
  stop_timer
286
310
  @connection = nil
287
311
  end
288
312
 
289
-
290
313
  def start_timer
314
+ # Only start the timer if there is a connection starting or in place
315
+ return if @closing || @connection.nil?
291
316
  @timer.cancel if @timer
292
317
  @timer = @thread.scheduler.in(@inactivity_timeout) do
293
318
  @timer = nil
@@ -302,9 +327,10 @@ module UV
302
327
  end
303
328
 
304
329
  def idle_timeout
305
- @parser.reason = :timeout if @parser.request
306
- @connection.reason = :timeout
330
+ connection = @connection
307
331
  close_connection
332
+ @parser.reason = :timeout if @parser.request
333
+ connection.reason = :timeout if connection
308
334
  end
309
335
  end
310
336
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UV
4
- VERSION = '2.4.6'
4
+ VERSION = '2.4.7'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uv-rays
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.6
4
+ version: 2.4.7
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: 2018-06-14 00:00:00.000000000 Z
11
+ date: 2019-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: libuv
@@ -266,7 +266,6 @@ files:
266
266
  - spec/ping_spec.rb
267
267
  - spec/scheduler_spec.rb
268
268
  - spec/scheduler_time_spec.rb
269
- - spec/zen_spec.rb
270
269
  - uv-rays.gemspec
271
270
  homepage: https://github.com/cotag/uv-rays
272
271
  licenses:
@@ -288,13 +287,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
288
287
  version: '0'
289
288
  requirements: []
290
289
  rubyforge_project:
291
- rubygems_version: 2.6.14
290
+ rubygems_version: 2.7.7
292
291
  signing_key:
293
292
  specification_version: 4
294
293
  summary: Abstractions for working with Libuv
295
294
  test_files:
296
295
  - spec/scheduler_time_spec.rb
297
- - spec/zen_spec.rb
298
296
  - spec/ping_spec.rb
299
297
  - spec/http_endpoint_spec.rb
300
298
  - spec/connection_spec.rb
@@ -1,27 +0,0 @@
1
- require 'libuv'
2
- require 'set'
3
-
4
-
5
- describe Libuv::Listener do
6
- it "should ensure there are no remaining object references in callbacks", network: true do
7
- require 'objspace'
8
-
9
- checked = Set.new
10
-
11
- # These are created by loop objects and are never cleaned up
12
- # This is OK as the loops are expected to execute for the life of the application
13
- except = []
14
-
15
- ObjectSpace.each_object(Class) do |cls|
16
- next unless cls.ancestors.include? ::UV::Connection
17
- next if checked.include? cls
18
- checked << cls
19
- end
20
-
21
- if checked.length > 0
22
- puts "\nMemory Leak in #{checked.inspect}"
23
- end
24
-
25
- expect(checked.length).to be(0)
26
- end
27
- end