rbgo 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/rbgo/select_chan.rb +30 -22
- data/lib/rbgo/version.rb +1 -1
- 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: ae31a8f82bcb17f6ef6b4731a7943dcfc54354f3f917c1bba6ad0db28928f239
|
4
|
+
data.tar.gz: d7204fed9c21e51c2eaea41397f71fe14ed2b477e42dab134185cb265469f8a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8cf78287a1fe22e763384d474e7d9703a19f4770d026108bf04ddc1c0a6e105658ab16865200bb92a186979f972152e49db23f828c2d4809b8ef56a6098b613c
|
7
|
+
data.tar.gz: 7d9fdfd4915c70b8f29b811dac898b9bc3bcbca7ea78dd63e23c5a58c268b901321bc7727c0bc546d36b7f5d56cad85874ed6d31e07fcbe7a5aa740b9f123b89
|
data/Gemfile.lock
CHANGED
data/lib/rbgo/select_chan.rb
CHANGED
@@ -157,7 +157,7 @@ module Rbgo
|
|
157
157
|
|
158
158
|
def pop(nonblock = false)
|
159
159
|
resource = nil
|
160
|
-
ok
|
160
|
+
ok = true
|
161
161
|
if closed?
|
162
162
|
return [nil, false]
|
163
163
|
end
|
@@ -179,7 +179,7 @@ module Rbgo
|
|
179
179
|
enq_cond.wait(deq_mutex)
|
180
180
|
end
|
181
181
|
resource = resource_array.first
|
182
|
-
ok
|
182
|
+
ok = false if resource_array.empty?
|
183
183
|
resource_array.clear
|
184
184
|
self.have_deq_waiting_flag = false
|
185
185
|
deq_cond.signal
|
@@ -191,12 +191,14 @@ module Rbgo
|
|
191
191
|
end
|
192
192
|
|
193
193
|
def close
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
194
|
+
deq_mutex.synchronize do
|
195
|
+
self.close_flag = true
|
196
|
+
enq_cond.broadcast
|
197
|
+
deq_cond.broadcast
|
198
|
+
notify_readable_observers
|
199
|
+
notify_writable_observers
|
200
|
+
self
|
201
|
+
end
|
200
202
|
end
|
201
203
|
|
202
204
|
def closed?
|
@@ -247,6 +249,8 @@ module Rbgo
|
|
247
249
|
@readable_observers.extend(MonitorMixin)
|
248
250
|
@writable_observers = Set.new
|
249
251
|
@writable_observers.extend(MonitorMixin)
|
252
|
+
|
253
|
+
@mutex = Mutex.new
|
250
254
|
end
|
251
255
|
|
252
256
|
def push(obj, nonblock = false)
|
@@ -259,17 +263,19 @@ module Rbgo
|
|
259
263
|
end
|
260
264
|
|
261
265
|
def pop(nonblock = false)
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
266
|
+
@mutex.synchronize do
|
267
|
+
res = nil
|
268
|
+
ok = true
|
269
|
+
ok = false if empty? && closed?
|
270
|
+
begin
|
271
|
+
res = super(nonblock)
|
272
|
+
notify_writable_observers
|
273
|
+
rescue ThreadError
|
274
|
+
raise unless closed?
|
275
|
+
ok = false
|
276
|
+
end
|
277
|
+
[res, ok]
|
271
278
|
end
|
272
|
-
[res, ok]
|
273
279
|
end
|
274
280
|
|
275
281
|
def clear
|
@@ -279,10 +285,12 @@ module Rbgo
|
|
279
285
|
end
|
280
286
|
|
281
287
|
def close
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
288
|
+
@mutex.synchronize do
|
289
|
+
super
|
290
|
+
notify_readable_observers
|
291
|
+
notify_writable_observers
|
292
|
+
self
|
293
|
+
end
|
286
294
|
end
|
287
295
|
|
288
296
|
alias_method :<<, :push
|
data/lib/rbgo/version.rb
CHANGED