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 +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 }
|