Skip to content

Instantly share code, notes, and snippets.

@koyachi
Created January 19, 2010 10:59
Show Gist options
  • Save koyachi/280855 to your computer and use it in GitHub Desktop.
Save koyachi/280855 to your computer and use it in GitHub Desktop.
diff -r -u ./lib/q4m/client.rb ../xxx/vendor/gems/ruby/1.8/dirs/q4m/lib/q4m/client.rb
--- ./lib/q4m/client.rb 2009-12-22 16:53:28.000000000 +0900
+++ ../xxx/vendor/gems/ruby/1.8/dirs/q4m/lib/q4m/client.rb 2010-01-19 18:55:46.000000000 +0900
@@ -3,6 +3,7 @@
class Q4M::Client
def self.destroy(_dbh, _owner_mode)
proc {
+ p "[Q4M::Client.destroy] #{_dbh.inspect}, #{_owner_mode}"
if _dbh
_dbh.do "SELECT queue_abort();" if _owner_mode == 1
_dbh.do "SELECT queue_end();"
@@ -29,7 +30,10 @@
@__table = nil
@__res = nil
- ObjectSpace.define_finalizer self, self.class.destroy(@_dbh, @owner_mode)
+ # 2010-01-19 koyachi
+# ObjectSpace.define_finalizer self, self.class.destroy(@_dbh, @owner_mode)
+ destroyer = self.class.destroy(@_dbh, @owner_mode)
+ ObjectSpace.define_finalizer self, destroyer
end
def _connect
@@ -81,6 +85,7 @@
end
def queue_end
+ p "[Q4M::Client] SELECT queue_end();"
_dbh.do "SELECT queue_end();"
end
@@ -88,6 +93,8 @@
# v ワーカー1つで複数キュー指定時は優先度キューとして動作
# v 複数ワーカーで複数キュー指定時
def start_worker(workers, config=nil)
+ p "[Q4M::Client#start_worker] #{workers.inspect}"
+ p "[Q4M::Client#start_worker] #{config.inspect}"
worker_instances = workers.map {|w| w.new config}
handlers = {}
worker_instances.each do |wi|
@@ -100,13 +107,24 @@
queue_tables = [worker_instances.map{|w| w.queue_tables}.flatten]
loop do
table = self.next(queue_tables, 10)
+ p "[Q4M::Client#start_worker.next]"
if table
+ p "[Q4M::Client#start_worker.next] #{table.inspect}"
table = table.to_s
result = self.fetch_hash table
+ p "[Q4M::Client#start_worker.next] before work"
handlers[table].__send__ 'work', result, table
+ p "[Q4M::Client#start_worker.next] before queue_end"
self.queue_end
+
+ # 2010-01-19 koyachi
+ ObjectSpace.undefine_finalizer self
+# ObjectSpace.define_finalizer self, self.class.destroy(@_dbh, @owner_mode)
+ destroyer = self.class.destroy(@_dbh, @owner_mode)
+ ObjectSpace.define_finalizer self, destroyer
end
sleep 1
+ p "[Q4M::Client#start_worker] sleep 1..."
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment