async-pool 0.3.6 → 0.3.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
2
  SHA256:
3
- metadata.gz: 4d128b17bceefb18481cc504c50770ac4ed5954f00d0d1bf2c6081180c73cb67
4
- data.tar.gz: 4a32a80b5066638e1b0a02a5b7683d6c2a20c13c89d7d42cacd8c30104cf5749
3
+ metadata.gz: 36dfa0c90392d3f6e3582b1bdd3e2fdb7667ddccb601fb4dd34df3e8aa3baa2e
4
+ data.tar.gz: bea9381873eed77a2fd9dcb4d90190e9fa3ebbbba0f38c5628ee369f5da58a97
5
5
  SHA512:
6
- metadata.gz: 9e310c01ee548452e4eeec3cc40bd1b1e3a6e4ec48534bf84648581353fed366cd0a2c8a7acaa872b41d038c441287c5c7154fc3650d47e4f11eb3a462fa2f8c
7
- data.tar.gz: 0ddbf97821d02ac53a872974f3168603d63148be6c444839d0676a4d73a5bc264246cb2a22814528777924b05529af090d4d3b5571130fe8b090f253abb4ca33
6
+ metadata.gz: 7ece710c9d7ec8fcb62b92ae9fb19775de4f781f886a3b9e285f08a0a9483599bc15e6b5d727df7697202f1b11381cba5ebb731d84ad9236abc4c29d8293a508
7
+ data.tar.gz: 02d545782a0b63b7ba74ce19a450ab7851886548eb71805c2fd9e5b71f8daf838c5dfbd5013b6bec2b639a2f630a5dfc846baaf9b28581cf53cb26d9b975290d
@@ -265,36 +265,45 @@ module Async
265
265
 
266
266
  # @returns [Object] An existing resource in a "used" state.
267
267
  def available_resource
268
+ resource = nil
269
+
268
270
  @guard.acquire do
269
- while resource = @available.last
270
- if usage = @resources[resource] and usage < resource.concurrency
271
- if resource.viable?
272
- usage = (@resources[resource] += 1)
273
-
274
- if usage == resource.concurrency
275
- # The resource is used up to it's limit:
276
- @available.pop
277
- end
278
-
279
- return resource
280
- else
281
- retire(resource)
271
+ resource = get_resource
272
+ end
273
+
274
+ return resource
275
+ rescue Exception
276
+ reuse(resource) if resource
277
+ raise
278
+ end
279
+
280
+ private def get_resource
281
+ while resource = @available.last
282
+ if usage = @resources[resource] and usage < resource.concurrency
283
+ if resource.viable?
284
+ usage = (@resources[resource] += 1)
285
+
286
+ if usage == resource.concurrency
287
+ # The resource is used up to it's limit:
282
288
  @available.pop
283
289
  end
290
+
291
+ return resource
284
292
  else
285
- # The resource has been removed already, so skip it and remove it from the availability list.
293
+ retire(resource)
286
294
  @available.pop
287
295
  end
288
- end
289
-
290
- if @limit.nil? or @resources.size < @limit
291
- Console.logger.debug(self) {"No available resources, allocating new one..."}
292
-
293
- return create_resource
296
+ else
297
+ # The resource has been removed already, so skip it and remove it from the availability list.
298
+ @available.pop
294
299
  end
295
300
  end
296
301
 
297
- return nil
302
+ if @limit.nil? or @resources.size < @limit
303
+ Console.logger.debug(self) {"No available resources, allocating new one..."}
304
+
305
+ return create_resource
306
+ end
298
307
  end
299
308
  end
300
309
  end
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Async
22
22
  module Pool
23
- VERSION = "0.3.6"
23
+ VERSION = "0.3.7"
24
24
  end
25
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-pool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-08 00:00:00.000000000 Z
11
+ date: 2021-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async
@@ -138,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  requirements: []
141
- rubygems_version: 3.2.3
141
+ rubygems_version: 3.3.0.dev
142
142
  signing_key:
143
143
  specification_version: 4
144
144
  summary: A singleplex and multiplex resource pool for implementing robust clients.