polyphony 0.38 → 0.39

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: b952f96f313866e5b61e200093fcb1eb8111b2d48bb2a736e36b62f06772786c
4
- data.tar.gz: 03ffbc7481d3e20cfd5d50cc0c7e1e28749da15a6c9d65c89e83a0370b61b2d2
3
+ metadata.gz: e3be3a6ec277c0c06e1d4b071f7fcee1229bbdde20d6b78b5b585ca9ac5624cd
4
+ data.tar.gz: 27f3e920372dc8ab8e40f07b72444ba08813533e2912c8400fe28ad50ed756c2
5
5
  SHA512:
6
- metadata.gz: 8fb34d135a0ab50a3e3ae722dd3f9ae70ba8ee83534c199f98611f5fa273b424fcedab548929a2dedcdaddec73a9aa6b652fa97a924dd5400155cf57a1cdcaf0
7
- data.tar.gz: caacb6a006f52abf888a9f4a3f1ef2c917a73422abaf1cba7d1ae1b0c7db07a3bc62a5a6b6abbe22e46fd6e679e82d7a048ec2d9ac7ec7dee54453600c688597
6
+ metadata.gz: 6d4267e177eda276b2d643e0262d1475c9f9f0ebaed2dd8573c245127b618dab11b00c05e0ef58ba2f5b8fd88b127feb1cc0f94390e27c66ae8857d0a5eb1a65
7
+ data.tar.gz: 1006b8aa742a9c38bd39512c7f9bfbe3c33b0f07ee1b2e262d8f5f140114066599b9444726c3e9c8cb998326a779da8d14d159ebcf5df226f02eedaa78530f98
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.39 2020-04-13
2
+
3
+ * Prevent timer scheduling a nil fiber
4
+
1
5
  ## 0.38 2020-04-13
2
6
 
3
7
  * Fix post-fork segfault if parent process has multiple threads with active watchers
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- polyphony (0.38)
4
+ polyphony (0.39)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/ext/gyro/timer.c CHANGED
@@ -66,26 +66,28 @@ inline void timer_activate(struct Gyro_Timer *timer) {
66
66
  ev_timer_start(timer->ev_loop, &timer->ev_timer);
67
67
  }
68
68
 
69
- inline void timer_deactivate(struct Gyro_Timer *timer, int non_recurring_only) {
69
+ inline void timer_deactivate(struct Gyro_Timer *timer, int force_deactivate) {
70
70
  if (!timer->active) return;
71
71
 
72
- if (!timer->repeat || !non_recurring_only) {
73
- ev_timer_stop(timer->ev_loop, &timer->ev_timer);
74
- if (RTEST(timer->selector)) {
75
- Gyro_Selector_remove_active_watcher(timer->selector, timer->self);
76
- timer->selector = Qnil;
77
- }
78
- timer->ev_loop = 0;
79
- timer->active = 0;
80
- }
81
-
82
72
  timer->fiber = Qnil;
73
+
74
+ // timer should not be deactivated if
75
+ if (timer->repeat && !force_deactivate) return;
76
+
77
+ ev_timer_stop(timer->ev_loop, &timer->ev_timer);
78
+ if (RTEST(timer->selector)) {
79
+ Gyro_Selector_remove_active_watcher(timer->selector, timer->self);
80
+ timer->selector = Qnil;
81
+ }
82
+ timer->ev_loop = 0;
83
+ timer->active = 0;
83
84
  }
84
85
 
85
86
  void Gyro_Timer_callback(struct ev_loop *ev_loop, struct ev_timer *ev_timer, int revents) {
86
87
  struct Gyro_Timer *timer = (struct Gyro_Timer*)ev_timer;
87
88
 
88
- Fiber_make_runnable(timer->fiber, DBL2NUM(timer->after));
89
+ if (timer->fiber != Qnil)
90
+ Fiber_make_runnable(timer->fiber, DBL2NUM(timer->after));
89
91
  timer_deactivate(timer, 1);
90
92
  }
91
93
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Polyphony
4
- VERSION = '0.38'
4
+ VERSION = '0.39'
5
5
  end
data/test/helper.rb CHANGED
@@ -18,6 +18,15 @@ Minitest::Reporters.use! [
18
18
  Minitest::Reporters::SpecReporter.new
19
19
  ]
20
20
 
21
+ module MiniTest::Assertions
22
+ def assert_in_range(range, act)
23
+ msg = message(msg) {
24
+ "Expected #{act.inspect} to be in range #{range.inspect}"
25
+ }
26
+ assert range.include?(act), msg
27
+ end
28
+ end
29
+
21
30
  class MiniTest::Test
22
31
  def setup
23
32
  if Fiber.current.children.size > 0
@@ -106,7 +106,7 @@ class MoveOnAfterTest < MiniTest::Test
106
106
  end
107
107
  t1 = Time.now
108
108
 
109
- assert t1 - t0 < 0.03
109
+ assert_in_range 0..0.03, t1 - t0
110
110
  assert_nil v
111
111
  end
112
112
 
@@ -118,7 +118,7 @@ class MoveOnAfterTest < MiniTest::Test
118
118
  end
119
119
  t1 = Time.now
120
120
 
121
- assert t1 - t0 < 0.02
121
+ assert_in_range 0..0.02, t1 - t0
122
122
  assert_equal :bar, v
123
123
  end
124
124
 
@@ -129,7 +129,7 @@ class MoveOnAfterTest < MiniTest::Test
129
129
  assert_equal Fiber.current, f.parent
130
130
  v = sleep 1
131
131
  t1 = Time.now
132
- assert t1 - t0 < 0.02
132
+ assert_in_range 0..0.02, t1 - t0
133
133
  assert_equal 'foo', v
134
134
  end
135
135
  end
@@ -145,7 +145,7 @@ class CancelAfterTest < MiniTest::Test
145
145
  end
146
146
  end
147
147
  t1 = Time.now
148
- assert t1 - t0 < 0.02
148
+ assert_in_range 0..0.02, t1 - t0
149
149
  end
150
150
 
151
151
  def test_cancel_after_without_block
@@ -157,7 +157,7 @@ class CancelAfterTest < MiniTest::Test
157
157
  sleep 1
158
158
  end
159
159
  t1 = Time.now
160
- assert t1 - t0 < 0.02
160
+ assert_in_range 0..0.02, t1 - t0
161
161
  end
162
162
  end
163
163
 
@@ -204,7 +204,7 @@ class SpinLoopTest < MiniTest::Test
204
204
  f = spin_loop(rate: 50) { buffer << (counter += 1) }
205
205
  sleep 0.1
206
206
  f.stop
207
- assert counter >= 5 && counter <= 6
207
+ assert_in_range 5..6, counter
208
208
  end
209
209
  end
210
210
 
@@ -217,7 +217,7 @@ class ThrottledLoopTest < MiniTest::Test
217
217
  end
218
218
  sleep 0.1
219
219
  f.stop
220
- assert counter >= 5 && counter <= 6
220
+ assert_in_range 5..6, counter
221
221
  end
222
222
 
223
223
  def test_throttled_loop_with_count
@@ -248,14 +248,14 @@ class GlobalAPIEtcTest < MiniTest::Test
248
248
  end
249
249
  sleep 0.05
250
250
  f.stop
251
- assert (4..5).include?(buffer.size)
251
+ assert_in_range 4..5, buffer.size
252
252
  end
253
253
 
254
254
  def test_sleep
255
255
  t0 = Time.now
256
256
  sleep 0.05
257
257
  elapsed = Time.now - t0
258
- assert (0.045..0.08).include? elapsed
258
+ assert_in_range 0.045..0.08, elapsed
259
259
 
260
260
  f = spin { sleep }
261
261
  snooze
data/test/test_io.rb CHANGED
@@ -61,6 +61,13 @@ class IOTest < MiniTest::Test
61
61
  @o.close
62
62
  assert_equal 'foobarbaz', @i.read
63
63
  end
64
+
65
+ def test_big_write
66
+ chunk = '*' * 60000
67
+ @o << chunk
68
+ @o.close
69
+ assert_equal chunk, @i.read
70
+ end
64
71
  end
65
72
 
66
73
  class IOClassMethodsTest < MiniTest::Test
data/test/test_thread.rb CHANGED
@@ -38,7 +38,7 @@ class ThreadTest < MiniTest::Test
38
38
  t0 = Time.now
39
39
  r = t.join(0.01)
40
40
 
41
- assert Time.now - t0 < 0.2
41
+ assert_in_range 0..0.2, Time.now - t0
42
42
  assert_equal [1, 2, 3], buffer
43
43
  assert_nil r
44
44
  ensure
@@ -65,8 +65,8 @@ class ThreadPoolTest < MiniTest::Test
65
65
  end
66
66
  elapsed = Time.now - t0
67
67
 
68
- assert elapsed < 0.007
69
- assert buffer.size < 2
68
+ assert_in_range 0..0.007, elapsed
69
+ assert_in_range 0..1, buffer.size
70
70
 
71
71
  sleep 0.1 # allow time for threads to spawn
72
72
  assert_equal @pool.size, threads.uniq.size
@@ -10,8 +10,7 @@ class ThrottlerTest < MiniTest::Test
10
10
  sleep 0.02
11
11
  f.stop
12
12
  snooze
13
- assert buffer.size >= 2
14
- assert buffer.size <= 3
13
+ assert_in_range 2..3, buffer.size
15
14
  ensure
16
15
  t.stop
17
16
  end
@@ -24,7 +23,7 @@ class ThrottlerTest < MiniTest::Test
24
23
  end
25
24
  sleep 0.25
26
25
  f.stop
27
- assert (2..6).include?(buffer.size)
26
+ assert_in_range 2..6, buffer.size
28
27
  ensure
29
28
  t.stop
30
29
  end
@@ -35,8 +34,7 @@ class ThrottlerTest < MiniTest::Test
35
34
  f = spin { loop { t.process { buffer << 1 } } }
36
35
  sleep 0.02
37
36
  f.stop
38
- assert buffer.size >= 2
39
- assert buffer.size <= 3
37
+ assert_in_range 2..3, buffer.size
40
38
  ensure
41
39
  t.stop
42
40
  end
data/test/test_timer.rb CHANGED
@@ -29,28 +29,4 @@ class TimerTest < MiniTest::Test
29
29
  ensure
30
30
  t.stop
31
31
  end
32
-
33
- def test_that_repeating_timer_compensates_for_drift
34
- count = 0
35
- t = Gyro::Timer.new(0.1, 0.1)
36
- deltas = []
37
- last = nil
38
- spin {
39
- last = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
40
- loop {
41
- t.await
42
- now = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
43
- elapsed = (now - last)
44
- deltas << elapsed
45
- last = now
46
- count += 1
47
- sleep 0.05
48
- break if count >= 3
49
- }
50
- }
51
- suspend
52
- assert_equal 0, deltas[1..-1].filter { |d| (d - 0.1).abs >= 0.05 }.size
53
- ensure
54
- t.stop
55
- end
56
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polyphony
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.38'
4
+ version: '0.39'
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-04-13 00:00:00.000000000 Z
11
+ date: 2020-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty