async-safe 0.5.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a159f426b967f880b5935565fde44767b006695b75475e097f3e8d2e7239f8fe
4
- data.tar.gz: a3549d80e371d6b42e6bacd9f6aa64f09479e8432e0648b8aa4b2a93c5e25f45
3
+ metadata.gz: 6cbe7dd25832d342534d929db18b02710ff5bb37e9f8c8b4f43e0409eb177823
4
+ data.tar.gz: c02bf34452470e70b39f1125595dab77fc8ac6d4898333adcc8323599464f4e8
5
5
  SHA512:
6
- metadata.gz: 8b514ecda9b54080477fe913b9facaeba091523ba6d72dc2aa3a186c1c01fff74595057f64947fff3fcb570804166d273009518d3275861373cd5ccea21edc67
7
- data.tar.gz: 4fe5eabb41e14c091176b1b30ee600db76143158db5a18bfa4b995d8e3a071b8d84e7857cb84a3443d70864cf36accc57ba514c857948fc18c9699bea88e443d
6
+ metadata.gz: 49a2081742fa5dce76e706fd62715afff8b0256cfae9bd87b4a32735db970b565f3c608d8953d969cec226febe0977f51201c5d84234915c83a97963b5044d89
7
+ data.tar.gz: 24aac6c2711cee0a34a998055b3e1b6100eae6c052eaf9b694fcabccbaae384b6d06f2c76305f6f986dceb3cb7844a86de7629afc55503fd1957e85c0d548d7e
checksums.yaml.gz.sig CHANGED
Binary file
@@ -16,6 +16,10 @@ module Async
16
16
  # Uses TracePoint to track in-flight method calls and detect concurrent access.
17
17
  class Monitor
18
18
  ASYNC_SAFE = true
19
+
20
+ IS_A = Kernel.instance_method(:is_a?)
21
+ FROZEN = Kernel.instance_method(:frozen?)
22
+ CLASS = Kernel.instance_method(:class)
19
23
 
20
24
  # Initialize a new concurrency monitor.
21
25
  def initialize
@@ -66,15 +70,15 @@ module Async
66
70
  object = trace_point.self
67
71
 
68
72
  # Skip tracking class/module methods:
69
- return if object.is_a?(Module)
73
+ return if IS_A.bind_call(object, Module)
70
74
 
71
75
  # Skip frozen objects:
72
- return if object.frozen?
76
+ return if FROZEN.bind_call(object)
73
77
 
74
78
  method = trace_point.method_id
75
79
 
76
80
  # Check the object's actual class:
77
- klass = object.class
81
+ klass = CLASS.bind_call(object)
78
82
 
79
83
  # Check if the class or method is marked as async-safe:
80
84
  # Returns: true (skip), false (simple tracking), or Symbol (guard-based tracking)
@@ -140,15 +144,15 @@ module Async
140
144
  object = trace_point.self
141
145
 
142
146
  # Skip tracking class/module methods:
143
- return if object.is_a?(Module)
147
+ return if IS_A.bind_call(object, Module)
144
148
 
145
149
  # Skip frozen objects:
146
- return if object.frozen?
150
+ return if FROZEN.bind_call(object)
147
151
 
148
152
  method = trace_point.method_id
149
153
 
150
154
  # Check the object's actual class:
151
- klass = object.class
155
+ klass = CLASS.bind_call(object)
152
156
 
153
157
  # Check if the class or method is marked as async-safe:
154
158
  safe = klass.async_safe?(method)
@@ -159,6 +163,9 @@ module Async
159
163
  @mutex.synchronize do
160
164
  entry = @guards[object]
161
165
 
166
+ # No guard held, nothing to release:
167
+ return unless entry
168
+
162
169
  if safe == false
163
170
  # Simple tracking (single guard)
164
171
  # Release if this fiber holds it
@@ -5,7 +5,7 @@
5
5
 
6
6
  module Async
7
7
  module Safe
8
- VERSION = "0.5.0"
8
+ VERSION = "0.5.1"
9
9
  end
10
10
  end
11
11
 
data/readme.md CHANGED
@@ -22,6 +22,11 @@ Please see the [project documentation](https://socketry.github.io/async-safe/) f
22
22
 
23
23
  Please see the [project releases](https://socketry.github.io/async-safe/releases/index) for all releases.
24
24
 
25
+ ### v0.5.1
26
+
27
+ - Protect against missing guard in `check_return`.
28
+ - Use `Kernel` instance methods to handle broken proxy objects directly.
29
+
25
30
  ### v0.5.0
26
31
 
27
32
  - More conservative tracking of objects using call/return for ownership transfer.
data/releases.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Releases
2
2
 
3
+ ## v0.5.1
4
+
5
+ - Protect against missing guard in `check_return`.
6
+ - Use `Kernel` instance methods to handle broken proxy objects directly.
7
+
3
8
  ## v0.5.0
4
9
 
5
10
  - More conservative tracking of objects using call/return for ownership transfer.
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-safe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
metadata.gz.sig CHANGED
Binary file