From: Yusuke Endoh Date: 2010-05-14T21:15:01+09:00 Subject: [ruby-core:30241] [Bug #3290](Rejected) File descriptors not closed when all IO objects are collected Issue #3290 has been updated by Yusuke Endoh. Status changed from Open to Rejected Hi, 2010/5/14 Tomas Matousek : > def foo > f = File.open("a.txt", "w+") > fd = f.to_i > f = nil > fd > end > > fd = foo > 10.times { GC.start } ? ? ?# [1] This is not a bug. The IO has been not collected yet. MRI's GC is not exact. In other words, MRI does not guarantee that an object is collected as soon as it becomes unreachable. You can see the IO closed if you open many files: def foo(f) f = File.open("#{ f }.txt", "w+") fd = f.to_i f = nil fd end fds = ("a".."z").map {|f| foo(f) } GC.start fds.each do |fd| g = IO.new(fd, "w+") #=> Bad file descriptor (Errno::EBADF) end -- Yusuke Endoh ---------------------------------------- http://redmine.ruby-lang.org/issues/show/3290 ---------------------------------------- http://redmine.ruby-lang.org