polyphony 0.43.8 → 0.45.0

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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +7 -1
  3. data/CHANGELOG.md +38 -0
  4. data/Gemfile.lock +13 -11
  5. data/README.md +20 -5
  6. data/Rakefile +1 -1
  7. data/TODO.md +16 -14
  8. data/bin/stress.rb +28 -0
  9. data/docs/_posts/2020-07-26-polyphony-0.44.md +77 -0
  10. data/docs/api-reference/thread.md +1 -1
  11. data/docs/getting-started/overview.md +14 -14
  12. data/docs/getting-started/tutorial.md +1 -1
  13. data/examples/adapters/sequel_mysql.rb +23 -0
  14. data/examples/adapters/sequel_mysql_pool.rb +33 -0
  15. data/examples/core/{xx-agent.rb → xx-backend.rb} +5 -5
  16. data/examples/core/xx-channels.rb +4 -2
  17. data/examples/core/xx-using-a-mutex.rb +2 -1
  18. data/examples/io/xx-pry.rb +18 -0
  19. data/examples/io/xx-rack_server.rb +71 -0
  20. data/examples/performance/thread-vs-fiber/polyphony_server_read_loop.rb +1 -1
  21. data/ext/polyphony/backend.h +41 -0
  22. data/ext/polyphony/event.c +86 -0
  23. data/ext/polyphony/extconf.rb +1 -1
  24. data/ext/polyphony/fiber.c +0 -5
  25. data/ext/polyphony/{libev_agent.c → libev_backend.c} +234 -228
  26. data/ext/polyphony/polyphony.c +4 -0
  27. data/ext/polyphony/polyphony.h +16 -16
  28. data/ext/polyphony/polyphony_ext.c +4 -2
  29. data/ext/polyphony/queue.c +52 -12
  30. data/ext/polyphony/thread.c +55 -42
  31. data/lib/polyphony.rb +25 -39
  32. data/lib/polyphony/adapters/irb.rb +2 -17
  33. data/lib/polyphony/adapters/mysql2.rb +19 -0
  34. data/lib/polyphony/adapters/postgres.rb +5 -5
  35. data/lib/polyphony/adapters/process.rb +2 -2
  36. data/lib/polyphony/adapters/readline.rb +17 -0
  37. data/lib/polyphony/adapters/sequel.rb +45 -0
  38. data/lib/polyphony/core/channel.rb +3 -34
  39. data/lib/polyphony/core/exceptions.rb +11 -0
  40. data/lib/polyphony/core/global_api.rb +11 -6
  41. data/lib/polyphony/core/resource_pool.rb +22 -71
  42. data/lib/polyphony/core/sync.rb +48 -9
  43. data/lib/polyphony/core/throttler.rb +1 -1
  44. data/lib/polyphony/extensions/core.rb +37 -19
  45. data/lib/polyphony/extensions/fiber.rb +5 -1
  46. data/lib/polyphony/extensions/io.rb +7 -8
  47. data/lib/polyphony/extensions/openssl.rb +6 -6
  48. data/lib/polyphony/extensions/socket.rb +12 -22
  49. data/lib/polyphony/extensions/thread.rb +6 -5
  50. data/lib/polyphony/net.rb +2 -1
  51. data/lib/polyphony/version.rb +1 -1
  52. data/polyphony.gemspec +6 -3
  53. data/test/helper.rb +1 -1
  54. data/test/{test_agent.rb → test_backend.rb} +22 -22
  55. data/test/test_event.rb +1 -0
  56. data/test/test_fiber.rb +21 -5
  57. data/test/test_io.rb +1 -1
  58. data/test/test_kernel.rb +5 -0
  59. data/test/test_queue.rb +20 -0
  60. data/test/test_resource_pool.rb +34 -43
  61. data/test/test_signal.rb +5 -29
  62. data/test/test_sync.rb +52 -0
  63. metadata +74 -30
  64. data/.gitbook.yaml +0 -4
  65. data/lib/polyphony/event.rb +0 -17
@@ -34,6 +34,7 @@ class EventTest < MiniTest::Test
34
34
  }
35
35
  }
36
36
  snooze
37
+
37
38
  t = Thread.new do
38
39
  orig_sleep 0.001
39
40
  3.times { a.signal }
@@ -352,7 +352,7 @@ class FiberTest < MiniTest::Test
352
352
  result = []
353
353
  f = Fiber.current.spin do
354
354
  result << :start
355
- result << Thread.current.agent.sleep(1)
355
+ result << Thread.current.backend.sleep(1)
356
356
  end
357
357
  snooze
358
358
  f.interrupt
@@ -413,6 +413,22 @@ class FiberTest < MiniTest::Test
413
413
  f2&.stop
414
414
  end
415
415
 
416
+ def test_interject
417
+ buf = []
418
+ f = spin_loop { sleep }
419
+ snooze
420
+ f.interject { buf << Fiber.current }
421
+ snooze
422
+ assert_equal [f], buf
423
+ assert_equal :waiting, f.state
424
+
425
+ f.interject { buf << :foo; raise Polyphony::MoveOn }
426
+ snooze
427
+
428
+ assert_equal [f, :foo], buf
429
+ assert_equal :dead, f.state
430
+ end
431
+
416
432
  def test_state
417
433
  counter = 0
418
434
  f = spin do
@@ -625,7 +641,7 @@ class FiberTest < MiniTest::Test
625
641
  end
626
642
  end
627
643
  sleep 0.1
628
- f = spin { Thread.current.agent.waitpid(pid) }
644
+ f = spin { Thread.current.backend.waitpid(pid) }
629
645
  o.close
630
646
  Process.kill('INT', pid)
631
647
  f.await
@@ -647,7 +663,7 @@ class FiberTest < MiniTest::Test
647
663
  end
648
664
  end
649
665
  sleep 0.2
650
- f = spin { Thread.current.agent.waitpid(pid) }
666
+ f = spin { Thread.current.backend.waitpid(pid) }
651
667
  o.close
652
668
  Process.kill('TERM', pid)
653
669
  f.await
@@ -674,7 +690,7 @@ class FiberTest < MiniTest::Test
674
690
  sleep 0.2
675
691
  Process.kill('TERM', pid)
676
692
  end
677
- Thread.current.agent.waitpid(pid)
693
+ Thread.current.backend.waitpid(pid)
678
694
  klass = i.read
679
695
  i.close
680
696
  assert_equal 'Polyphony::Terminate', klass
@@ -692,7 +708,7 @@ class FiberTest < MiniTest::Test
692
708
 
693
709
  f.schedule
694
710
  f << 'bar'
695
- snooze
711
+ 2.times { snooze }
696
712
  assert_equal ['bar'], buffer
697
713
  end
698
714
  end
@@ -55,7 +55,7 @@ class IOTest < MiniTest::Test
55
55
  results << result
56
56
  case result
57
57
  when :wait_readable
58
- Thread.current.agent.wait_io(i, false)
58
+ Thread.current.backend.wait_io(i, false)
59
59
  else
60
60
  break result
61
61
  end
@@ -19,6 +19,11 @@ class KernelTest < MiniTest::Test
19
19
  timer&.stop
20
20
  end
21
21
 
22
+ def test_Kernel_system_singleton_method
23
+ assert_equal true, Kernel.system("which ruby > /dev/null 2>&1")
24
+ assert_equal false, Kernel.system("which rruubbyy > /dev/null 2>&1")
25
+ end
26
+
22
27
  def patch_open3
23
28
  class << Open3
24
29
  alias_method :orig_popen2, :popen2
@@ -109,4 +109,24 @@ class QueueTest < MiniTest::Test
109
109
  @queue << :foo
110
110
  assert_nil f1.await
111
111
  end
112
+
113
+ def test_queue_size
114
+ assert_equal 0, @queue.size
115
+
116
+ @queue.push 1
117
+
118
+ assert_equal 1, @queue.size
119
+
120
+ @queue.push 2
121
+
122
+ assert_equal 2, @queue.size
123
+
124
+ @queue.shift
125
+
126
+ assert_equal 1, @queue.size
127
+
128
+ @queue.shift
129
+
130
+ assert_equal 0, @queue.size
131
+ end
112
132
  end
@@ -12,29 +12,19 @@ class ResourcePoolTest < MiniTest::Test
12
12
  assert_equal 0, pool.size
13
13
 
14
14
  results = []
15
- 4.times {
16
- spin {
17
- snooze
15
+ 4.times { |i|
16
+ spin(:"foo#{i}") {
18
17
  pool.acquire { |resource|
19
18
  results << resource
20
19
  snooze
21
20
  }
22
21
  }
23
22
  }
24
- 2.times { snooze }
25
- assert_equal 2, pool.limit
26
- assert_equal 0, pool.available
27
- assert_equal 2, pool.size
28
-
29
- 2.times { snooze }
30
-
31
- assert_equal ['a', 'b', 'a', 'b'], results
32
-
33
- 2.times { snooze }
34
-
23
+ Fiber.current.await_all_children
35
24
  assert_equal 2, pool.limit
36
25
  assert_equal 2, pool.available
37
26
  assert_equal 2, pool.size
27
+ assert_equal ['a', 'b', 'a', 'b'], results
38
28
  end
39
29
 
40
30
  def test_discard
@@ -46,40 +36,18 @@ class ResourcePoolTest < MiniTest::Test
46
36
  spin {
47
37
  snooze
48
38
  pool.acquire { |resource|
49
- results << resource
50
- resource.__discard__ if resource == 'b'
39
+ results << resource
40
+ pool.discard! if resource == 'b'
51
41
  snooze
52
42
  }
53
43
  }
54
44
  }
55
- 6.times { snooze }
45
+ Fiber.current.await_all_children
56
46
 
57
47
  assert_equal ['a', 'b', 'a', 'a'], results
58
48
  assert_equal 1, pool.size
59
49
  end
60
50
 
61
- def test_add
62
- resources = [+'a', +'b']
63
- pool = Polyphony::ResourcePool.new(limit: 2) { resources.shift }
64
-
65
- pool << +'c'
66
-
67
- results = []
68
- 4.times {
69
- spin {
70
- snooze
71
- pool.acquire { |resource|
72
- results << resource
73
- resource.__discard__ if resource == 'b'
74
- snooze
75
- }
76
- }
77
- }
78
- 6.times { snooze }
79
-
80
- assert_equal ['c', 'a', 'c', 'a'], results
81
- end
82
-
83
51
  def test_single_resource_limit
84
52
  resources = [+'a', +'b']
85
53
  pool = Polyphony::ResourcePool.new(limit: 1) { resources.shift }
@@ -94,7 +62,7 @@ class ResourcePoolTest < MiniTest::Test
94
62
  }
95
63
  }
96
64
  }
97
- 20.times { snooze }
65
+ Fiber.current.await_all_children
98
66
 
99
67
  assert_equal ['a'] * 10, results
100
68
  end
@@ -128,11 +96,34 @@ class ResourcePoolTest < MiniTest::Test
128
96
  resources = [+'a', +'b']
129
97
  pool = Polyphony::ResourcePool.new(limit: 1) { resources.shift }
130
98
 
99
+ results = []
131
100
  pool.acquire do |r|
132
- assert_equal 'a', r
133
- pool.acquire do |r|
134
- assert_equal 'a', r
101
+ results << r
102
+ 2.times do
103
+ pool.acquire do |r|
104
+ results << r
105
+ end
135
106
  end
136
107
  end
108
+ assert_equal ['a']*3, results
109
+ end
110
+
111
+ def test_overloaded_resource_pool
112
+ pool = Polyphony::ResourcePool.new(limit: 1) { 1 }
113
+
114
+ buf = []
115
+ fibers = 2.times.map do |i|
116
+ spin(:"foo#{i}") do
117
+ 2.times do
118
+ pool.acquire do |r|
119
+ buf << r
120
+ snooze
121
+ end
122
+ end
123
+ end
124
+ end
125
+ Fiber.current.await_all_children
126
+
127
+ assert_equal [1, 1, 1, 1], buf
137
128
  end
138
129
  end
@@ -23,7 +23,7 @@ class SignalTrapTest < Minitest::Test
23
23
  sleep 0.01
24
24
  o.close
25
25
  Process.kill('INT', pid)
26
- Thread.current.agent.waitpid(pid)
26
+ Thread.current.backend.waitpid(pid)
27
27
  buffer = i.read
28
28
  assert_equal "3-interrupt\n", buffer
29
29
  end
@@ -51,40 +51,16 @@ class SignalTrapTest < Minitest::Test
51
51
  sleep 0.02
52
52
  o.close
53
53
  Process.kill('INT', pid)
54
- Thread.current.agent.waitpid(pid)
54
+ Thread.current.backend.waitpid(pid)
55
55
  buffer = i.read
56
56
  assert_equal "3 - interrupted\n2 - terminated\n1 - terminated\n", buffer
57
57
  end
58
58
 
59
- def test_signal_exception_possible_race_condition
59
+ def test_interrupt_signal_scheduling
60
60
  i, o = IO.pipe
61
61
  pid = Polyphony.fork do
62
62
  i.close
63
- f1 = nil
64
- f2 = spin do
65
- # this fiber will try to create a race condition by
66
- # - being scheduled before f1 is scheduled with the Interrupt exception
67
- # - scheduling f1 without an exception
68
- suspend
69
- f1.schedule
70
- rescue ::Interrupt => e
71
- o.puts '2-interrupt'
72
- raise e
73
- end
74
- f1 = spin do
75
- # this fiber is the one that will be current when the
76
- # signal is trapped
77
- sleep 1
78
- o << 'boom'
79
- rescue ::Interrupt => e
80
- o.puts '1-interrupt'
81
- raise e
82
- end
83
- old_trap = trap('INT') do
84
- f2.schedule
85
- old_trap.()
86
- end
87
- Fiber.current.await_all_children
63
+ sleep
88
64
  rescue ::Interrupt => e
89
65
  o.puts '3-interrupt'
90
66
  ensure
@@ -93,7 +69,7 @@ class SignalTrapTest < Minitest::Test
93
69
  o.close
94
70
  sleep 0.1
95
71
  Process.kill('INT', pid)
96
- Thread.current.agent.waitpid(pid)
72
+ Thread.current.backend.waitpid(pid)
97
73
  buffer = i.read
98
74
  assert_equal "3-interrupt\n", buffer
99
75
  end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helper'
4
+
5
+ class MutexTest < MiniTest::Test
6
+ def test_mutex
7
+ buf = []
8
+ lock = Polyphony::Mutex.new
9
+ (1..3).each do |i|
10
+ spin do
11
+ lock.synchronize do
12
+ buf << ">> #{i}"
13
+ sleep(rand * 0.05)
14
+ buf << "<< #{i}"
15
+ end
16
+ end
17
+ end
18
+
19
+ Fiber.current.await_all_children
20
+ assert_equal ['>> 1', '<< 1', '>> 2', '<< 2', '>> 3', '<< 3'], buf
21
+ end
22
+
23
+ def test_condition_variable
24
+ buf = []
25
+ lock1 = Polyphony::Mutex.new
26
+ lock2 = Polyphony::Mutex.new
27
+ cond = Polyphony::ConditionVariable.new
28
+
29
+ spin do
30
+ lock1.synchronize do
31
+ sleep 0.01
32
+ cond.wait(lock1)
33
+ lock2.synchronize do
34
+ buf << :foo
35
+ end
36
+ end
37
+ end
38
+
39
+ spin do
40
+ lock2.synchronize do
41
+ sleep 0.01
42
+ lock1.synchronize do
43
+ buf << :bar
44
+ end
45
+ cond.signal
46
+ end
47
+ end
48
+
49
+ Fiber.current.await_all_children
50
+ assert_equal [:bar, :foo], buf
51
+ end
52
+ end
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polyphony
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.43.8
4
+ version: 0.45.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-21 00:00:00.000000000 Z
11
+ date: 2020-07-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: httparty
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '='
18
- - !ruby/object:Gem::Version
19
- version: 0.17.0
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '='
25
- - !ruby/object:Gem::Version
26
- version: 0.17.0
27
- - !ruby/object:Gem::Dependency
28
- name: localhost
14
+ name: rake-compiler
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - '='
32
18
  - !ruby/object:Gem::Version
33
- version: 1.1.4
19
+ version: 1.0.5
34
20
  type: :development
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - '='
39
25
  - !ruby/object:Gem::Version
40
- version: 1.1.4
26
+ version: 1.0.5
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: minitest
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -95,33 +81,33 @@ dependencies:
95
81
  - !ruby/object:Gem::Version
96
82
  version: 0.85.1
97
83
  - !ruby/object:Gem::Dependency
98
- name: pg
84
+ name: pry
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - '='
102
88
  - !ruby/object:Gem::Version
103
- version: 1.1.4
89
+ version: 0.13.1
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - '='
109
95
  - !ruby/object:Gem::Version
110
- version: 1.1.4
96
+ version: 0.13.1
111
97
  - !ruby/object:Gem::Dependency
112
- name: rake-compiler
98
+ name: pg
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
101
  - - '='
116
102
  - !ruby/object:Gem::Version
117
- version: 1.0.5
103
+ version: 1.1.4
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
108
  - - '='
123
109
  - !ruby/object:Gem::Version
124
- version: 1.0.5
110
+ version: 1.1.4
125
111
  - !ruby/object:Gem::Dependency
126
112
  name: redis
127
113
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +150,54 @@ dependencies:
164
150
  - - "~>"
165
151
  - !ruby/object:Gem::Version
166
152
  version: 0.6.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: rack
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: 2.0.8
160
+ - - "<"
161
+ - !ruby/object:Gem::Version
162
+ version: 2.3.0
163
+ type: :development
164
+ prerelease: false
165
+ version_requirements: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: 2.0.8
170
+ - - "<"
171
+ - !ruby/object:Gem::Version
172
+ version: 2.3.0
173
+ - !ruby/object:Gem::Dependency
174
+ name: mysql2
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - '='
178
+ - !ruby/object:Gem::Version
179
+ version: 0.5.3
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - '='
185
+ - !ruby/object:Gem::Version
186
+ version: 0.5.3
187
+ - !ruby/object:Gem::Dependency
188
+ name: sequel
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - '='
192
+ - !ruby/object:Gem::Version
193
+ version: 5.34.0
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - '='
199
+ - !ruby/object:Gem::Version
200
+ version: 5.34.0
167
201
  - !ruby/object:Gem::Dependency
168
202
  name: jekyll
169
203
  requirement: !ruby/object:Gem::Requirement
@@ -228,7 +262,6 @@ extensions:
228
262
  extra_rdoc_files:
229
263
  - README.md
230
264
  files:
231
- - ".gitbook.yaml"
232
265
  - ".github/workflows/test.yml"
233
266
  - ".gitignore"
234
267
  - ".rubocop.yml"
@@ -241,9 +274,11 @@ files:
241
274
  - Rakefile
242
275
  - TODO.md
243
276
  - bin/polyphony-debug
277
+ - bin/stress.rb
244
278
  - docs/_config.yml
245
279
  - docs/_includes/head.html
246
280
  - docs/_includes/title.html
281
+ - docs/_posts/2020-07-26-polyphony-0.44.md
247
282
  - docs/_sass/custom/custom.scss
248
283
  - docs/_sass/overrides.scss
249
284
  - docs/_user-guide/all-about-timers.md
@@ -292,12 +327,14 @@ files:
292
327
  - examples/adapters/redis_client.rb
293
328
  - examples/adapters/redis_pubsub.rb
294
329
  - examples/adapters/redis_pubsub_perf.rb
330
+ - examples/adapters/sequel_mysql.rb
331
+ - examples/adapters/sequel_mysql_pool.rb
295
332
  - examples/core/01-spinning-up-fibers.rb
296
333
  - examples/core/02-awaiting-fibers.rb
297
334
  - examples/core/03-interrupting.rb
298
335
  - examples/core/04-handling-signals.rb
299
- - examples/core/xx-agent.rb
300
336
  - examples/core/xx-at_exit.rb
337
+ - examples/core/xx-backend.rb
301
338
  - examples/core/xx-caller.rb
302
339
  - examples/core/xx-channels.rb
303
340
  - examples/core/xx-daemon.rb
@@ -349,6 +386,8 @@ files:
349
386
  - examples/io/xx-irb.rb
350
387
  - examples/io/xx-net-http.rb
351
388
  - examples/io/xx-open.rb
389
+ - examples/io/xx-pry.rb
390
+ - examples/io/xx-rack_server.rb
352
391
  - examples/io/xx-switch.rb
353
392
  - examples/io/xx-system.rb
354
393
  - examples/io/xx-tcpserver.rb
@@ -388,11 +427,13 @@ files:
388
427
  - ext/libev/ev_win32.c
389
428
  - ext/libev/ev_wrap.h
390
429
  - ext/libev/test_libev_win32.c
430
+ - ext/polyphony/backend.h
431
+ - ext/polyphony/event.c
391
432
  - ext/polyphony/extconf.rb
392
433
  - ext/polyphony/fiber.c
393
434
  - ext/polyphony/libev.c
394
435
  - ext/polyphony/libev.h
395
- - ext/polyphony/libev_agent.c
436
+ - ext/polyphony/libev_backend.c
396
437
  - ext/polyphony/polyphony.c
397
438
  - ext/polyphony/polyphony.h
398
439
  - ext/polyphony/polyphony_ext.c
@@ -404,9 +445,12 @@ files:
404
445
  - lib/polyphony.rb
405
446
  - lib/polyphony/adapters/fs.rb
406
447
  - lib/polyphony/adapters/irb.rb
448
+ - lib/polyphony/adapters/mysql2.rb
407
449
  - lib/polyphony/adapters/postgres.rb
408
450
  - lib/polyphony/adapters/process.rb
451
+ - lib/polyphony/adapters/readline.rb
409
452
  - lib/polyphony/adapters/redis.rb
453
+ - lib/polyphony/adapters/sequel.rb
410
454
  - lib/polyphony/adapters/trace.rb
411
455
  - lib/polyphony/core/channel.rb
412
456
  - lib/polyphony/core/exceptions.rb
@@ -415,7 +459,6 @@ files:
415
459
  - lib/polyphony/core/sync.rb
416
460
  - lib/polyphony/core/thread_pool.rb
417
461
  - lib/polyphony/core/throttler.rb
418
- - lib/polyphony/event.rb
419
462
  - lib/polyphony/extensions/core.rb
420
463
  - lib/polyphony/extensions/fiber.rb
421
464
  - lib/polyphony/extensions/io.rb
@@ -431,7 +474,7 @@ files:
431
474
  - test/q.rb
432
475
  - test/run.rb
433
476
  - test/stress.rb
434
- - test/test_agent.rb
477
+ - test/test_backend.rb
435
478
  - test/test_event.rb
436
479
  - test/test_ext.rb
437
480
  - test/test_fiber.rb
@@ -444,6 +487,7 @@ files:
444
487
  - test/test_signal.rb
445
488
  - test/test_socket.rb
446
489
  - test/test_supervise.rb
490
+ - test/test_sync.rb
447
491
  - test/test_thread.rb
448
492
  - test/test_thread_pool.rb
449
493
  - test/test_throttler.rb