From: Matt Armstrong Date: 2002-02-13T09:34:39+09:00 Subject: Possible bug -- ruby cvs (1.7.2 2002-02-10) interpreter seg fault If I run this script require 'tempfile' while true tempfile = nil begin tempfile = Tempfile.new('tempfile-test') ensure tempfile.close(true) unless tempfile.nil? end end From a shell in which I've done "ulimit -v 20480" the ruby interpreter seg faults. It seems to seg fault when it runs out of memory. Bumping the resource limit to 80 megabytes doesn't help -- this script seems to continuously eat up more and more memory. This is a distilled test case from a real script that processes a whole lot of input with temp files. This is under Linux with the latest CVS ruby. GDB says: Program received signal SIGSEGV, Segmentation fault. 0x0805b1d5 in backtrace (lev=-1) at eval.c:4803 (gdb) bt #0 0x0805b1d5 in backtrace (lev=-1) at eval.c:4803 #1 0x0805b418 in make_backtrace () at eval.c:4885 #2 0x08058431 in rb_longjmp (tag=8, mesg=1080758032) at eval.c:3533 #3 0x0805861b in rb_exc_fatal () at eval.c:3576 #4 0x080bf584 in rb_sys_fail (mesg=0x80c2781 "failed to allocate memory") at error.c:714 #5 0x08068f7d in mem_error (mesg=0x80c2781 "failed to allocate memory") at gc.c:81 #6 0x0806905f in ruby_xmalloc (size=1024) at gc.c:110 #7 0x0809dc96 in ruby_re_compile_pattern ( pattern=0x8115220 ":in `__getobj__'$", size=17, bufp=0x897ef68) at regex.c:2415 #8 0x08093fed in make_regexp (s=0x8115220 ":in `__getobj__'$", len=17, flags=0) at re.c:432 #9 0x08094bf3 in rb_reg_initialize (obj=1080695896, s=0x8115220 ":in `__getobj__'$", len=17, options=0) at re.c:917 #10 0x08094cb3 in rb_reg_new (s=0x8115220 ":in `__getobj__'$", len=17, options=0) at re.c:949 #11 0x08087211 in parse_regx (term=47, paren=47) at parse.y:2599 #12 0x0808bb89 in ruby_yylex () at parse.y:3529 #13 0x08081785 in ruby_yyparse () at /usr/share/bison/bison.simple:595 #14 0x08085b96 in yycompile (f=0x80c06b5 "(eval)", line=1) at parse.y:2148 #15 0x08085d26 in rb_compile_string (f=0x80c06b5 "(eval)", s=1080710392, line=1) at parse.y:2209 #16 0x0805b45e in compile (src=1080710392, file=0x80c06b5 "(eval)", line=1) at eval.c:4904 #17 0x0805b75f in eval (self=1080040864, src=1080710392, scope=4, file=0x80c06b5 "(eval)", line=1) at eval.c:4984 #18 0x0805bc4f in rb_f_eval (argc=1, argv=0xbfffb754, self=1080040864) at eval.c:5091 #19 0x0805a118 in call_cfunc (func=0x805b9a8 , recv=1080040864, len=-1, argc=1, argv=0xbfffb754) at eval.c:4326 #20 0x0805a621 in rb_call0 (klass=1075628208, recv=1080040864, id=3777, argc=1, argv=0xbfffb754, body=0x401caae0, nosuper=1) at eval.c:4463 #21 0x0805ae38 in rb_call (klass=1075628208, recv=1080040864, mid=3777, argc=1, argv=0xbfffb754, scope=1) at eval.c:4687 #22 0x0805613c in rb_eval (self=1080040864, n=0x401b6980) at eval.c:2680 #23 0x08055672 in rb_eval (self=1080040864, n=0x401b6758) at eval.c:2508 #24 0x08058c98 in rb_yield_0 (val=1079988520, self=1080040864, klass=0, pcall=0) at eval.c:3757 #25 0x08058ec8 in rb_yield (val=1079988520) at eval.c:3826 #26 0x080b4c24 in rb_ary_each (ary=1079993176) at array.c:767 #27 0x0805a126 in call_cfunc (func=0x80b4c04 , recv=1079993176, len=0, argc=0, argv=0x0) at eval.c:4329 #28 0x0805a621 in rb_call0 (klass=1075592928, recv=1079993176, id=3689, argc=0, argv=0x0, body=0x401c39e8, nosuper=1) at eval.c:4463 #29 0x0805ae38 in rb_call (klass=1075592928, recv=1079993176, mid=3689, argc=0, argv=0x0, scope=0) at eval.c:4687 #30 0x08055289 in rb_eval (self=1080040864, n=0x401b8780) at eval.c:2420 #31 0x0805aa12 in rb_call0 (klass=1075553808, recv=1080040864, id=2889, argc=0, argv=0xbfffd4d4, body=0x401b8780, nosuper=0) at eval.c:4591 #32 0x0805ae38 in rb_call (klass=1075553808, recv=1080040864, mid=2889, argc=1, argv=0xbfffd4d0, scope=3) at eval.c:4687 #33 0x08056409 in rb_eval (self=1080040864, n=0x401b6350) at eval.c:2710 #34 0x0805473a in rb_eval (self=1080040864, n=0x401b62d8) at eval.c:2154 #35 0x0805aa12 in rb_call0 (klass=1075553736, recv=1080040864, id=2889, argc=0, argv=0xbfffd678, body=0x401b62d8, nosuper=0) at eval.c:4591 #36 0x0805ae38 in rb_call (klass=1075553736, recv=1080040864, mid=2889, argc=1, argv=0xbfffd674, scope=3) at eval.c:4687 #37 0x08056409 in rb_eval (self=1080040864, n=0x401b82e8) at eval.c:2710 #38 0x0805473a in rb_eval (self=1080040864, n=0x401b9140) at eval.c:2154 #39 0x0805aa12 in rb_call0 (klass=1075552080, recv=1080040864, id=2889, argc=0, argv=0xbfffe468, body=0x401b9140, nosuper=0) at eval.c:4591 #40 0x0805ae38 in rb_call (klass=1075552080, recv=1080040864, mid=2889, argc=1, argv=0xbfffe464, scope=1) at eval.c:4687 #41 0x0805b0d9 in rb_funcall2 (recv=1080040864, mid=2889, argc=1, argv=0xbfffe464) at eval.c:4771 #42 0x0805d6e7 in rb_obj_call_init (obj=1080040864, argc=1, argv=0xbfffe464) at eval.c:5799 #43 0x0807c36c in rb_class_new_instance (argc=1, argv=0xbfffe464, klass=1075552080) at object.c:683 #44 0x0805a118 in call_cfunc (func=0x807c324 , recv=1075552080, len=-1, argc=1, argv=0xbfffe464) at eval.c:4326 #45 0x0805a621 in rb_call0 (klass=1075628328, recv=1075552080, id=3249, argc=1, argv=0xbfffe464, body=0x401cb4d0, nosuper=1) at eval.c:4463 #46 0x0805ae38 in rb_call (klass=1075628328, recv=1075552080, mid=3249, argc=1, argv=0xbfffe464, scope=0) at eval.c:4687 #47 0x08055f06 in rb_eval (self=1075622784, n=0x401ba388) at eval.c:2667 #48 0x08056ada in rb_eval (self=1075622784, n=0x401ba370) at eval.c:2832 #49 0x080558bd in rb_eval (self=1075622784, n=0x401ba220) at eval.c:2548 #50 0x08054dca in rb_eval (self=1075622784, n=0x401ba1a8) at eval.c:2338 #51 0x080523c8 in eval_node (self=1075622784, node=0x401ba1a8) at eval.c:1082 #52 0x0805276f in ruby_run () at eval.c:1216 #53 0x08050fb2 in main (argc=2, argv=0xbffff954, envp=0xbffff960) at main.c:50 #54 0x4008b65f in __libc_start_main () from /lib/libc.so.6 -- matt