From 777beb3e27785d2da2865cb5fc0d43f1c158cb5e Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 22 Mar 2011 11:08:31 -0700 Subject: queue_pool: switch to ivars to protect internals --- lib/rainbows/queue_pool.rb | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'lib/rainbows/queue_pool.rb') diff --git a/lib/rainbows/queue_pool.rb b/lib/rainbows/queue_pool.rb index ce888d8..06f7c40 100644 --- a/lib/rainbows/queue_pool.rb +++ b/lib/rainbows/queue_pool.rb @@ -5,24 +5,26 @@ require 'thread' # Thread pool class based on pulling off a single Ruby Queue. # This is NOT used for the ThreadPool class, since that class does not # need a userspace Queue. -class Rainbows::QueuePool < Struct.new(:queue, :threads) +class Rainbows::QueuePool + attr_reader :queue + def initialize(size = 20) q = Queue.new - self.threads = (1..size).map do + @threads = (1..size).map do Thread.new do while job = q.shift yield job end end end - self.queue = q + @queue = q end def quit! - threads.each { |_| queue << nil } - threads.delete_if do |t| + @threads.each { |_| @queue << nil } + @threads.delete_if do |t| Rainbows.tick t.alive? ? t.join(0.01) : true - end until threads.empty? + end until @threads.empty? end end -- cgit v1.2.3-24-ge0c7