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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e4b5afdd21d18724108ef4022a855b0954e01263e470ec36f448dd296dce2b5
4
- data.tar.gz: 9e383518f8e84bf7087a320833f20295d6529e11d6cdbb1a78b7ba67079272f5
3
+ metadata.gz: ae31a8f82bcb17f6ef6b4731a7943dcfc54354f3f917c1bba6ad0db28928f239
4
+ data.tar.gz: d7204fed9c21e51c2eaea41397f71fe14ed2b477e42dab134185cb265469f8a6
5
5
  SHA512:
6
- metadata.gz: b28a60edb7593cbddf7b5e7d8fbed384f559d785800d3ad3975de6cd9927dfcde01a565e136a133b1351d29e8307fbe2fd5dab654b843328e748051ce20deb8a
7
- data.tar.gz: db7001f93432fa60ee221aab6420638f65f6f786c389b62ad87e0d1d99f9d39bbe00441a68554c4a1fee7d4007759f87f48b61bf1453905947f3b2af0b5b917f
6
+ metadata.gz: 8cf78287a1fe22e763384d474e7d9703a19f4770d026108bf04ddc1c0a6e105658ab16865200bb92a186979f972152e49db23f828c2d4809b8ef56a6098b613c
7
+ data.tar.gz: 7d9fdfd4915c70b8f29b811dac898b9bc3bcbca7ea78dd63e23c5a58c268b901321bc7727c0bc546d36b7f5d56cad85874ed6d31e07fcbe7a5aa740b9f123b89
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rbgo (0.1.3)
4
+ rbgo (0.1.4)
5
5
  sys-cpu (~> 0.8)
6
6
 
7
7
  GEM
@@ -157,7 +157,7 @@ module Rbgo
157
157
 
158
158
  def pop(nonblock = false)
159
159
  resource = nil
160
- ok = true
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 = false if resource_array.empty?
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
- self.close_flag = true
195
- enq_cond.broadcast
196
- deq_cond.broadcast
197
- notify_readable_observers
198
- notify_writable_observers
199
- self
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
- res = nil
263
- ok = true
264
- begin
265
- res = super(nonblock)
266
- notify_writable_observers
267
- res
268
- rescue ThreadError
269
- raise unless closed?
270
- ok = false
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
- super
283
- notify_readable_observers
284
- notify_writable_observers
285
- self
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
@@ -1,3 +1,3 @@
1
1
  module Rbgo
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbgo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wang Yin