From: sheepman Date: 2002-02-07T12:35:40+09:00 Subject: [ruby-dev:15862] Re: [ruby-cvs] ruby: * io.c (fptr_finalize): should raise error when fclose fails. こんにちは。 以下のようなコードでSEGVします。 タイミングによっては、しないときもあります。 $cat testio.rb f = "tmp.file" File.open(f, "w") do |file| io = IO.new(file.fileno, "w") io.close end $ruby testio.rb testio.rb:2:in `open': 不正なファイルデスクリプタです - "tmp.file" (Errno::EBADF) from testio.rb:2 testio.rb:2: [BUG] Segmentation fault ruby 1.7.2 (2002-02-06) [i686-linux] バックトレースです。 Program received signal SIGSEGV, Segmentation fault. __libc_free (mem=0x11) at malloc.c:3005 (gdb)bt #0 __libc_free (mem=0x11) at malloc.c:3005 #1 0x2ab6db4c in _IO_unsave_markers (fp=0x810ed60) at genops.c:167 #2 0x2ab6cab9 in _IO_new_file_close_it (fp=0x810ed60) at fileops.c:134 #3 0x2ab6894d in _IO_new_fclose (fp=0x810ed60) at iofclose.c:50 #4 0x806d37d in fptr_finalize (fptr=0x810f008, fin=2) at io.c:1110 #5 0x806d3e9 in rb_io_fptr_cleanup (fptr=0x810f008, fin=2) at io.c:1129 #6 0x806d441 in rb_io_fptr_finalize (fptr=0x810f008) at io.c:1147 #7 0x806908d in rb_gc_call_finalizer_at_exit () at gc.c:1454 #8 0x80522af in ruby_finalize () at eval.c:1173 #9 0x80523a1 in ruby_stop (ex=1) at eval.c:1199 #10 0x8052491 in ruby_run () at eval.c:1222 #11 0x8050df4 in main (argc=2, argv=0x7ffff5a4, envp=0x7ffff5b0) at main.c:50 #12 0x2ab2e96b in __libc_start_main (main=0x8050dd8
, argc=2, argv=0x7ffff5a4, init=0x8050370 <_init>, fini=0x80ba19c <_fini>, rtld_fini=0x2aab5d00 <_dl_fini>, stack_end=0x7ffff59c) at ../sysdeps/generic/libc-start.c:92 -- sheepman / TAMURA Takashi sheepman@tcn.zaq.ne.jp http://www.tcn.zaq.ne.jp/sheepman/ Key fingerprint = 4E13 FE38 CD73 48D3 38AE 00EE 9E28 F98B D569 848E