Hi!

> Probably you are seeing c6 remaining because you were playing with
> your code like so: 

Not really, let me paste the full code here:
-------------------------------------------------------------------------------
class CustomObject
	attr_accessor :val, :next
	def initialize(v,n=nil)
		@val	= v
		@next	= n
	end
	def to_s
		"Object #{@val} (#{self.object_id}) points to #{@next.nil? ? 'nothing' : 
@next.val} (#{@next.nil? ? '':@next.object_id})"
	end
end

def list
	print "Listing all the CustomObject's with ObjectSpace\n"
	print "#{ObjectSpace.each_object(CustomObject) {|v| puts v}} objects 
found\n\n"
end

def test
	c1 = CustomObject.new("1",CustomObject.new("2",CustomObject.new("3")))
	c4 = CustomObject.new("4",CustomObject.new("5"))
	c6 = CustomObject.new("6")
	c1.next.next.next = c1	
	list

	c1 = nil
	c4.next = nil
end

test
GC.start			
sleep(1)
list
-------------------------------------------------------------------------------
running
-------------------------------------------------------------------------------
Listing all the CustomObject's with ObjectSpace
Object 6 (-604875086) points to nothing ()
Object 4 (-604875066) points to 5 (-604875056)
Object 5 (-604875056) points to nothing ()
Object 1 (-604875026) points to 2 (-604875016)
Object 2 (-604875016) points to 3 (-604875006)
Object 3 (-604875006) points to 1 (-604875026)
6 objects found

Listing all the CustomObject's with ObjectSpace
Object 6 (-604875086) points to nothing ()
1 objects found
-------------------------------------------------------------------------------

 > Funny, I couldn't reproduce what you are seeing.
 > Nothing remains.

Maybe a situation like this:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/142834

But the main point of this question you solved: the begin ... end works 
perfectly.

Thanks!

----------------------------
EustáÒuio "TaQ" Rangel
eustaquiorangel / yahoo.com
http://beam.to/taq
UsuáÓio GNU/Linux no. 224050