polyphony 0.47.0 → 0.47.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 606d74c424178b9e8bb17cd7b2848e0e1c1b092e77eeb98ce1026fd7d1f38c61
4
- data.tar.gz: 9e003833af5f2c8505ea41d2ebe728fbf776f428f47d925b0185fd592d102737
3
+ metadata.gz: e9b7b3885b4f6d88b63d29814e7ce7883927c58fefaacab3ef980dafb3ef380f
4
+ data.tar.gz: 14ee82740f415364b675db77f9246482937a2650df437ecf42c8d590bbc3d9fb
5
5
  SHA512:
6
- metadata.gz: 1cfb1c81d3b38a545ceb856d4619c11386407081ecd43a6e6209d2ed4efb1c436242aa016657d379f0a0331ca24944f5e51c5359ad44afc3a88d53af1de7976b
7
- data.tar.gz: 9b47ba16c7de942bea952f9f12d225aed86a505c2fd6cf7740a88d5d398af0e91e37a16e3ee9af2129ad88c8ff17c2b5aba7dcf6630811af62202e4b2585d6dc
6
+ metadata.gz: 98d245d285e39383c2fad4f3045b2b994922f9c0c1100aec7b264c731cba9a433e8e0677a173bbbb3cfc11199e9f5f29d98c55ebf7224a5bb3358db93ba25bd3
7
+ data.tar.gz: 6bfa625ff66461d4a23b8e5c6c8d9c1818b6030950da28e7712d3207ee11654527b36205ddab904bfed58a85144b3f73e7892479992eb775bfe7fcc1d4e54ac0
@@ -1,3 +1,7 @@
1
+ ## 0.47.1
2
+
3
+ * Fix API compatibility between TCPSocket and IO
4
+
1
5
  ## 0.47.0
2
6
 
3
7
  * Implement `#spin_scope` used for creating blocking fiber scopes
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- polyphony (0.47.0)
4
+ polyphony (0.47.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -58,7 +58,18 @@ module Polyphony
58
58
  # Discards the currently-acquired resource
59
59
  # instead of returning it to the pool when done.
60
60
  def discard!
61
- @size -= 1 if @acquired_resources.delete(Fiber.current)
61
+ if block_given?
62
+ @size.times do
63
+ acquire do |r|
64
+ next if yield(r)
65
+
66
+ @size -= 1
67
+ @acquired_resources.delete(Fiber.current)
68
+ end
69
+ end
70
+ else
71
+ @size -= 1 if @acquired_resources.delete(Fiber.current)
72
+ end
62
73
  end
63
74
 
64
75
  def preheat!
@@ -35,6 +35,7 @@ class ::Socket
35
35
  def recv_loop(&block)
36
36
  Thread.current.backend.recv_loop(self, &block)
37
37
  end
38
+ alias_method :read_loop, :recv_loop
38
39
 
39
40
  def recvfrom(maxlen, flags = 0)
40
41
  @read_buffer ||= +''
@@ -53,8 +54,12 @@ class ::Socket
53
54
  Thread.current.backend.send(self, mesg)
54
55
  end
55
56
 
56
- def write(str)
57
- Thread.current.backend.send(self, str)
57
+ def write(str, *args)
58
+ if args.empty?
59
+ Thread.current.backend.send(self, str)
60
+ else
61
+ Thread.current.backend.send(self, str + args.join)
62
+ end
58
63
  end
59
64
  alias_method :<<, :write
60
65
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Polyphony
4
- VERSION = '0.47.0'
4
+ VERSION = '0.47.1'
5
5
  end
@@ -48,6 +48,27 @@ class ResourcePoolTest < MiniTest::Test
48
48
  assert_equal 1, pool.size
49
49
  end
50
50
 
51
+ def test_discard_with_block
52
+ resources = [+'a', +'b', +'c', +'d', +'e', +'f']
53
+ pool = Polyphony::ResourcePool.new(limit: 4) { resources.shift }
54
+
55
+ buffer = []
56
+ (1..4).each do |i|
57
+ spin do
58
+ 3.times do
59
+ pool.acquire { |r| buffer << [i, r]; trace [i]; snooze }
60
+ end
61
+ end
62
+ end
63
+
64
+ 2.times { trace [0]; snooze }
65
+ assert_equal [[1, 'a'], [2, 'b'], [3, 'c'], [4, 'd']], buffer
66
+
67
+ pool.discard! { |r| r == 'a' || r == 'c' }
68
+ 2.times { trace [0]; snooze }
69
+ assert_equal [[1, 'a'], [2, 'b'], [3, 'c'], [4, 'd'], [1, 'b'], [2, 'd'], [3, 'e'], [4, 'f']], buffer
70
+ end
71
+
51
72
  def test_single_resource_limit
52
73
  resources = [+'a', +'b']
53
74
  pool = Polyphony::ResourcePool.new(limit: 1) { resources.shift }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polyphony
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.47.0
4
+ version: 0.47.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner