fiber_scheduler 0.12.0 → 0.13.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.
- checksums.yaml +4 -4
- data/lib/fiber_scheduler/compatibility.rb +10 -10
- data/lib/fiber_scheduler/version.rb +1 -1
- data/lib/fiber_scheduler.rb +4 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be3272c27fb319231ce9d78e22324a2b8b0bd5d738ebedf09c070fa1011f68ad
|
4
|
+
data.tar.gz: 0b571efbfd06316e4317103777b144eef1983a1a9089fa9193186e5ae2993c52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c316ab691c76643b0a739eacb93442ba3f3fa8260a82a85ac30669afd71a729b5ed38bdfd91a8d800662259cf7501fcc2fd41c1e1f910146530fc7308375077
|
7
|
+
data.tar.gz: ace4e85ccfe0c3d1b2506d5291a4a31a1de0d45a6f614e2d05ae99b8fa2ef77d076ef0d0ff82a4d45a2a1f56e2d6972f508b6a56658c980d050add5f3429b38a
|
@@ -35,8 +35,8 @@ class FiberScheduler
|
|
35
35
|
|
36
36
|
fiber
|
37
37
|
|
38
|
-
when :
|
39
|
-
# Transfer to current fiber some time after a
|
38
|
+
when :volatile
|
39
|
+
# Transfer to current fiber some time after a volatile fiber yields.
|
40
40
|
unblock(nil, Fiber.current)
|
41
41
|
# Alternative to #unblock: Fiber.scheduler.push(Fiber.current)
|
42
42
|
|
@@ -46,9 +46,9 @@ class FiberScheduler
|
|
46
46
|
rescue Close
|
47
47
|
# Fiber scheduler is closing.
|
48
48
|
ensure
|
49
|
-
|
49
|
+
_volatile.delete(Fiber.current)
|
50
50
|
end
|
51
|
-
|
51
|
+
_volatile[fiber] = nil
|
52
52
|
fiber.tap(&:transfer)
|
53
53
|
|
54
54
|
when nil
|
@@ -63,17 +63,17 @@ class FiberScheduler
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
-
# #close and #
|
66
|
+
# #close and #_volatile handle a complexity in Async::Scheduler#close, more
|
67
67
|
# specifically this line:
|
68
68
|
# https://github.com/socketry/async/blob/456df488d801572821eaf5ec2fda10e3b9744a5f/lib/async/scheduler.rb#L55
|
69
69
|
def close
|
70
70
|
super
|
71
71
|
rescue
|
72
|
-
if
|
72
|
+
if _volatile.empty?
|
73
73
|
Kernel.raise
|
74
74
|
else
|
75
|
-
# #dup is used because #
|
76
|
-
|
75
|
+
# #dup is used because #_volatile is modified during iteration.
|
76
|
+
_volatile.dup.each do |fiber, _|
|
77
77
|
fiber.raise(Close)
|
78
78
|
end
|
79
79
|
|
@@ -81,8 +81,8 @@ class FiberScheduler
|
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
|
-
def
|
85
|
-
@
|
84
|
+
def _volatile
|
85
|
+
@_volatile ||= {}
|
86
86
|
end
|
87
87
|
|
88
88
|
def self.set_internal!
|
data/lib/fiber_scheduler.rb
CHANGED
@@ -68,7 +68,7 @@ module Kernel
|
|
68
68
|
|
69
69
|
fiber
|
70
70
|
|
71
|
-
when :
|
71
|
+
when :volatile
|
72
72
|
scheduler.unblock(nil, Fiber.current)
|
73
73
|
|
74
74
|
fiber = Fiber.new(blocking: false) do
|
@@ -77,9 +77,9 @@ module Kernel
|
|
77
77
|
rescue FiberScheduler::Compatibility::Close
|
78
78
|
# Fiber scheduler is closing.
|
79
79
|
ensure
|
80
|
-
scheduler.
|
80
|
+
scheduler._volatile.delete(Fiber.current)
|
81
81
|
end
|
82
|
-
scheduler.
|
82
|
+
scheduler._volatile[fiber] = nil
|
83
83
|
fiber.tap(&:transfer)
|
84
84
|
|
85
85
|
when nil
|
@@ -221,7 +221,7 @@ class FiberScheduler
|
|
221
221
|
|
222
222
|
fiber
|
223
223
|
|
224
|
-
when :
|
224
|
+
when :volatile
|
225
225
|
if current != @fiber
|
226
226
|
# nested Fiber.schedule
|
227
227
|
@nested << current
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fiber_scheduler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bruno Sutic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-02-
|
11
|
+
date: 2022-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async
|