rbgo 0.1.4 → 0.1.5

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: 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