polyphony 0.47.0 → 0.47.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
  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