Skip to content

Instantly share code, notes, and snippets.

@headius
Created April 28, 2012 05:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save headius/2516355 to your computer and use it in GitHub Desktop.
Save headius/2516355 to your computer and use it in GitHub Desktop.
# normal thread.rb Queue
q = Queue.new
wr = nil
# use block to ensure the reference goes away
tap do
obj = Object.new
wr = WeakRef.new(obj, q)
# reference is live at this point
puts wr.__getobj__
# queue is empty at this point
puts q.pop(true) rescue puts 'nothing in queue'
end
# run GC, presumably triggering finalizer insert into queue
GC.start
# reference is dead at this point
puts wr.__getobj__ rescue nil
# queue now contains the weakref object
puts q.pop(true).class
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment