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 +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +1 -1
- data/lib/polyphony/core/resource_pool.rb +12 -1
- data/lib/polyphony/extensions/socket.rb +7 -2
- data/lib/polyphony/version.rb +1 -1
- data/test/test_resource_pool.rb +21 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9b7b3885b4f6d88b63d29814e7ce7883927c58fefaacab3ef980dafb3ef380f
|
4
|
+
data.tar.gz: 14ee82740f415364b675db77f9246482937a2650df437ecf42c8d590bbc3d9fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98d245d285e39383c2fad4f3045b2b994922f9c0c1100aec7b264c731cba9a433e8e0677a173bbbb3cfc11199e9f5f29d98c55ebf7224a5bb3358db93ba25bd3
|
7
|
+
data.tar.gz: 6bfa625ff66461d4a23b8e5c6c8d9c1818b6030950da28e7712d3207ee11654527b36205ddab904bfed58a85144b3f73e7892479992eb775bfe7fcc1d4e54ac0
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
|
data/lib/polyphony/version.rb
CHANGED
data/test/test_resource_pool.rb
CHANGED
@@ -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 }
|