From: "Mauricio Fernández" Date: 2004-03-26T17:53:33+09:00 Subject: Infinite loop in st.c (st_foreach) ruby 1.8.1 (2003-12-25) [i686-linux] This is happening every once in a while, while running some rather large unit tests. It isn't very easy to reproduce and I don't think I'll be able to reduce it to a short snippet :-( However, I still have the gdb session open, just in case... 494 for(ptr = table->bins[i]; ptr != 0;) { 1: ptr = (st_table_entry *) 0x401a6ec4 (gdb) 495 retval = (*func)(ptr->key, ptr->record, arg); 1: ptr = (st_table_entry *) 0x401a6ec4 (gdb) 496 switch (retval) { 1: ptr = (st_table_entry *) 0x401a6ec4 (gdb) 498 last = ptr; 1: ptr = (st_table_entry *) 0x401a6ec4 (gdb) 499 ptr = ptr->next; 1: ptr = (st_table_entry *) 0x401a6ec4 (gdb) 500 break; 1: ptr = (st_table_entry *) 0x401a6ec4 (gdb) p *ptr $2 = {hash = 1075474172, key = 1075474108, record = 1075474116, next = 0x401a6ec4} (gdb) list 490 485 int (*func)(); 486 st_data_t arg; 487 { 488 st_table_entry *ptr, *last, *tmp; 489 enum st_retval retval; 490 int i; 491 492 for(i = 0; i < table->num_bins; i++) { 493 last = 0; 494 for(ptr = table->bins[i]; ptr != 0;) { (gdb) list 495 retval = (*func)(ptr->key, ptr->record, arg); 496 switch (retval) { 497 case ST_CONTINUE: 498 last = ptr; 499 ptr = ptr->next; 500 break; 501 case ST_STOP: 502 return; 503 case ST_DELETE: 504 tmp = ptr; (gdb) bt #0 st_foreach (table=0x401a6e8c, func=0x806d590 , arg=1) at st.c:500 #1 0x0806d5d6 in mark_tbl (tbl=0x401a6ec4, lev=0) at gc.c:640 #2 0x0806d861 in gc_mark_children (ptr=1075474116, lev=0) at gc.c:892 #3 0x0806d83d in gc_mark_children (ptr=1075474068, lev=0) at gc.c:887 #4 0x0806d83d in gc_mark_children (ptr=1075474076, lev=0) at gc.c:887 #5 0x0806d83d in gc_mark_children (ptr=1075474084, lev=0) at gc.c:887 #6 0x0806d83d in gc_mark_children (ptr=1075474092, lev=0) at gc.c:887 #7 0x0806d83d in gc_mark_children (ptr=1075474100, lev=0) at gc.c:887 #8 0x0806d83d in gc_mark_children (ptr=1075474108, lev=0) at gc.c:887 #9 0x0806d83d in gc_mark_children (ptr=1075474116, lev=0) at gc.c:887 #10 0x0806d7d7 in rb_gc_mark (ptr=0) at gc.c:720 #11 0x4023bdf4 in syck_mark_parser (parser=0x8986180) at rubyext.c:695 #12 0x0806d960 in gc_mark_children (ptr=1076127188, lev=0) at gc.c:926 #13 0x0806d563 in mark_locations_array (x=0xbffea6f4, n=21550) at gc.c:608 #14 0x0806e411 in rb_gc () at gc.c:1328 #15 0x0806d1b5 in rb_newobj () at gc.c:386 #16 0x0806f5de in hash_alloc (klass=0) at hash.c:183 #17 0x0806f643 in rb_hash_new () at hash.c:195 #18 0x4023becc in syck_parser_new (argc=0, argv=0x0, class=0) at rubyext.c:718 #19 0x08067cca in call_cfunc (func=0x4023be10 , recv=1075714936, len=1075474116, argc=1, argv=0x0) at eval.c:4932 #20 0x0805bf62 in rb_call0 (klass=1075714916, recv=1075714936, id=3369, oid=0, argc=0, argv=0x0, body=0x401e1aec, nosuper=0) at eval.c:5066 #21 0x0805c7b8 in rb_call (klass=1075714916, recv=1075714936, mid=3369, argc=0, argv=0x0, scope=0) at eval.c:5287 #22 0x0805788c in rb_eval (self=1076001116, n=0x0) at ruby.h:631 #23 0x0805775f in rb_eval (self=1076001116, n=0x0) at eval.c:3070 #24 0x08057151 in rb_eval (self=1076001116, n=0x0) at eval.c:3259 #25 0x0805c228 in rb_call0 (klass=1076010696, recv=1076001116, id=9481, oid=0, argc=0, argv=0xbffebe5c, body=0x4022b50c, nosuper=0) at eval.c:5194 #26 0x0805c7b8 in rb_call (klass=1076010696, recv=1076001116, mid=9481, argc=1, argv=0xbffebe58, scope=0) at eval.c:5287 #27 0x0805788c in rb_eval (self=1077796572, n=0x0) at ruby.h:631 ---Type to continue, or q to quit--- #28 0x0805c228 in rb_call0 (klass=1076343900, recv=1077796572, id=15785, oid=0, argc=0, argv=0xbffec69c, body=0x402c9a80, nosuper=0) at eval.c:5194 #29 0x0805c7b8 in rb_call (klass=1076343900, recv=1077796572, mid=15785, argc=1, argv=0xbffec698, scope=1) at eval.c:5287 #30 0x0805788c in rb_eval (self=1077796572, n=0x0) at ruby.h:631 #31 0x0805775f in rb_eval (self=1077796572, n=0x0) at eval.c:3070 #32 0x080570dd in rb_eval (self=1077796572, n=0x0) at eval.c:2959 #33 0x08057f15 in rb_eval (self=1077796572, n=0x0) at eval.c:3020 #34 0x0805c228 in rb_call0 (klass=1076343900, recv=1077796572, id=15863, oid=0, argc=0, argv=0xbffee1bc, body=0x402c7eb0, nosuper=0) at eval.c:5194 #35 0x0805c7b8 in rb_call (klass=1076343900, recv=1077796572, mid=15863, argc=1, argv=0xbffee1b8, scope=0) at eval.c:5287 #36 0x0805788c in rb_eval (self=1075492532, n=0x0) at ruby.h:631 #37 0x08057224 in rb_eval (self=1075492532, n=0x0) at eval.c:3279 #38 0x0805c228 in rb_call0 (klass=1076342500, recv=1075492532, id=2961, oid=0, argc=0, argv=0xbffef2e4, body=0x402bc77c, nosuper=0) at eval.c:5194 #39 0x0805c7b8 in rb_call (klass=1076342500, recv=1075492532, mid=2961, argc=3, argv=0xbffef2d8, scope=1) at eval.c:5287 #40 0x0805cb6e in rb_funcall2 (recv=1075474116, mid=0, argc=0, argv=0x0) at ruby.h:631 #41 0x0805f168 in rb_obj_call_init (obj=0, argc=0, argv=0x0) at eval.c:6430 #42 0x080838fc in rb_class_new_instance (argc=0, argv=0x0, klass=0) at object.c:849 #43 0x08067cca in call_cfunc (func=0x80838d0 , recv=1076342500, len=1075474116, argc=1, argv=0x401ab6b4) at eval.c:4932 #44 0x0805bf62 in rb_call0 (klass=1075682552, recv=1076342500, id=3369, oid=0, argc=3, argv=0xbffef2d8, body=0x401d8b3c, nosuper=0) at eval.c:5066 #45 0x0805c7b8 in rb_call (klass=1075682552, recv=1076342500, mid=3369, argc=3, argv=0xbffef2d8, scope=0) at eval.c:5287 #46 0x0805788c in rb_eval (self=1077796572, n=0x0) at ruby.h:631 #47 0x08057938 in rb_eval (self=1077796572, n=0x0) at ruby.h:636 #48 0x0805c228 in rb_call0 (klass=1076343900, recv=1077796572, id=15865, oid=0, argc=0, argv=0xbfff018c, body=0x402c7d48, nosuper=0) at eval.c:5194 #49 0x0805c7b8 in rb_call (klass=1076343900, recv=1077796572, mid=15865, argc=1, argv=0xbfff0188, scope=0) at eval.c:5287 ---Type to continue, or q to quit--- #50 0x0805788c in rb_eval (self=1078066992, n=0x0) at ruby.h:631 #51 0x08056c4b in rb_eval (self=1078066992, n=0x0) at eval.c:2796 #52 0x08056f2a in rb_eval (self=1078066992, n=0x0) at eval.c:2883 #53 0x0805706e in rb_eval (self=1078066992, n=0x0) at eval.c:2932 #54 0x0805a278 in rb_yield_0 (val=6933, self=1078066992, klass=0, flags=0, avalue=0) at eval.c:4293 #55 0x0805a7a9 in rb_yield (val=0) at eval.c:4346 #56 0x0808116f in int_dotimes (num=80001) at numeric.c:2380 #57 0x08067cd1 in call_cfunc (func=0x8081120 , recv=80001, len=1075474116, argc=1, argv=0x0) at eval.c:4935 #58 0x0805bf62 in rb_call0 (klass=1075664112, recv=80001, id=5401, oid=0, argc=0, argv=0x0, body=0x401d5428, nosuper=0) at eval.c:5066 #59 0x0805c7b8 in rb_call (klass=1075664112, recv=80001, mid=5401, argc=0, argv=0x0, scope=0) at eval.c:5287 #60 0x0805788c in rb_eval (self=1078066992, n=0x0) at ruby.h:631 #61 0x08056c4b in rb_eval (self=1078066992, n=0x0) at eval.c:2796 #62 0x0805c228 in rb_call0 (klass=1076658120, recv=1078066992, id=22721, oid=0, argc=0, argv=0xbfff2d60, body=0x402cb420, nosuper=0) at eval.c:5194 #63 0x0805c7b8 in rb_call (klass=1076658120, recv=1078066992, mid=22721, argc=2, argv=0xbfff2d58, scope=1) at eval.c:5287 #64 0x0805788c in rb_eval (self=1078066992, n=0x0) at ruby.h:631 #65 0x08056c4b in rb_eval (self=1078066992, n=0x0) at eval.c:2796 #66 0x0805c228 in rb_call0 (klass=1076658120, recv=1078066992, id=22697, oid=0, argc=0, argv=0xbfff3e3c, body=0x402ccfc8, nosuper=0) at eval.c:5194 #67 0x0805c7b8 in rb_call (klass=1076658120, recv=1078066992, mid=22697, argc=0, argv=0xbfff3e3c, scope=1) at eval.c:5287 #68 0x0805c9e5 in rb_f_send (argc=0, argv=0xbfff3e3c, recv=1078066992) at ruby.h:631 #69 0x08067cca in call_cfunc (func=0x805c970 , recv=1078066992, len=1075474116, argc=1, argv=0xbfff3e38) at eval.c:4932 #70 0x0805bf62 in rb_call0 (klass=1075682472, recv=1078066992, id=3889, oid=0, argc=1, argv=0xbfff3e38, body=0x401d7d90, nosuper=0) at eval.c:5066 #71 0x0805c7b8 in rb_call (klass=1075682472, recv=1078066992, mid=3889, argc=1, argv=0xbfff3e38, scope=1) at eval.c:5287 #72 0x0805788c in rb_eval (self=1078066992, n=0x0) at ruby.h:631 #73 0x08056f2a in rb_eval (self=1078066992, n=0x0) at eval.c:2883 ---Type to continue, or q to quit--- #74 0x0805706e in rb_eval (self=1078066992, n=0x0) at eval.c:2932 #75 0x0805c228 in rb_call0 (klass=1076250360, recv=1078066992, id=5089, oid=0, argc=0, argv=0xbfff531c, body=0x402898e0, nosuper=0) at eval.c:5194 #76 0x0805c7b8 in rb_call (klass=1076250360, recv=1078066992, mid=5089, argc=1, argv=0xbfff5318, scope=0) at eval.c:5287 #77 0x0805788c in rb_eval (self=1078067192, n=0x0) at ruby.h:631 #78 0x080618d0 in block_pass (self=1078067192, node=0x402671c8) at eval.c:7383 #79 0x08058382 in rb_eval (self=1078067192, n=0x0) at eval.c:2782 #80 0x0805a278 in rb_yield_0 (val=1078066992, self=1078067192, klass=0, flags=0, avalue=0) at eval.c:4293 #81 0x0805a7a9 in rb_yield (val=0) at eval.c:4346 #82 0x080bdf5f in rb_ary_each (ary=1078067072) at array.c:1106 #83 0x08067cd1 in call_cfunc (func=0x80bdf30 , recv=1078067072, len=1075474116, argc=1, argv=0x4041ff80) at eval.c:4935 #84 0x0805bf62 in rb_call0 (klass=1075652312, recv=1078067072, id=3833, oid=0, argc=0, argv=0x0, body=0x401d22b4, nosuper=0) at eval.c:5066 #85 0x0805c7b8 in rb_call (klass=1075652312, recv=1078067072, mid=3833, argc=0, argv=0x0, scope=0) at eval.c:5287 #86 0x0805788c in rb_eval (self=1078067192, n=0x0) at ruby.h:631 #87 0x08056c4b in rb_eval (self=1078067192, n=0x0) at eval.c:2796 #88 0x0805c228 in rb_call0 (klass=1076252700, recv=1078067192, id=5089, oid=0, argc=0, argv=0xbfff73bc, body=0x40267344, nosuper=0) at eval.c:5194 #89 0x0805c7b8 in rb_call (klass=1076252700, recv=1078067192, mid=5089, argc=1, argv=0xbfff73b8, scope=0) at eval.c:5287 #90 0x0805788c in rb_eval (self=1078083252, n=0x0) at ruby.h:631 #91 0x080618d0 in block_pass (self=1078083252, node=0x402671c8) at eval.c:7383 #92 0x08058382 in rb_eval (self=1078083252, n=0x0) at eval.c:2782 #93 0x0805a278 in rb_yield_0 (val=1078067192, self=1078083252, klass=0, flags=0, avalue=0) at eval.c:4293 #94 0x0805a7a9 in rb_yield (val=0) at eval.c:4346 #95 0x080bdf5f in rb_ary_each (ary=1078083212) at array.c:1106 #96 0x08067cd1 in call_cfunc (func=0x80bdf30 , recv=1078083212, len=1075474116, argc=1, argv=0x40423e8c) at eval.c:4935 #97 0x0805bf62 in rb_call0 (klass=1075652312, recv=1078083212, id=3833, oid=0, argc=0, argv=0x0, body=0x401d22b4, nosuper=0) at eval.c:5066 ---Type to continue, or q to quit--- #98 0x0805c7b8 in rb_call (klass=1075652312, recv=1078083212, mid=3833, argc=0, argv=0x0, scope=0) at eval.c:5287 #99 0x0805788c in rb_eval (self=1078083252, n=0x0) at ruby.h:631 #100 0x08056c4b in rb_eval (self=1078083252, n=0x0) at eval.c:2796 #101 0x0805c228 in rb_call0 (klass=1076252700, recv=1078083252, id=5089, oid=0, argc=0, argv=0xbfff945c, body=0x40267344, nosuper=0) at eval.c:5194 #102 0x0805c7b8 in rb_call (klass=1076252700, recv=1078083252, mid=5089, argc=1, argv=0xbfff9458, scope=0) at eval.c:5287 #103 0x0805788c in rb_eval (self=1078022992, n=0x0) at ruby.h:631 #104 0x08056c4b in rb_eval (self=1078022992, n=0x0) at eval.c:2796 #105 0x0805c228 in rb_call0 (klass=1078024312, recv=1078022992, id=24241, oid=0, argc=0, argv=0x0, body=0x4041b110, nosuper=0) at eval.c:5194 #106 0x0805c7b8 in rb_call (klass=1078024312, recv=1078022992, mid=24241, argc=0, argv=0x0, scope=0) at eval.c:5287 #107 0x0805788c in rb_eval (self=1078024352, n=0x0) at ruby.h:631 #108 0x08057f15 in rb_eval (self=1078024352, n=0x0) at eval.c:3020 #109 0x0805c228 in rb_call0 (klass=1078023772, recv=1078024352, id=24129, oid=0, argc=0, argv=0x0, body=0x4041d49c, nosuper=0) at eval.c:5194 #110 0x0805c7b8 in rb_call (klass=1078023772, recv=1078024352, mid=24129, argc=0, argv=0x0, scope=2) at eval.c:5287 #111 0x0805788c in rb_eval (self=1078024352, n=0x0) at ruby.h:631 #112 0x08057f15 in rb_eval (self=1078024352, n=0x0) at eval.c:3020 #113 0x0805c228 in rb_call0 (klass=1078023772, recv=1078024352, id=5009, oid=0, argc=0, argv=0x0, body=0x4041e1a8, nosuper=0) at eval.c:5194 #114 0x0805c7b8 in rb_call (klass=1078023772, recv=1078024352, mid=5009, argc=0, argv=0x0, scope=0) at eval.c:5287 #115 0x0805788c in rb_eval (self=1078023772, n=0x0) at ruby.h:631 #116 0x08057f15 in rb_eval (self=1078023772, n=0x0) at eval.c:3020 #117 0x0805c228 in rb_call0 (klass=1078023752, recv=1078023772, id=5089, oid=0, argc=0, argv=0xbfffce70, body=0x4041e7d4, nosuper=0) at eval.c:5194 #118 0x0805c7b8 in rb_call (klass=1078023752, recv=1078023772, mid=5089, argc=2, argv=0xbfffce68, scope=0) at eval.c:5287 #119 0x0805788c in rb_eval (self=1075530552, n=0x0) at ruby.h:631 ---Type to continue, or q to quit--- #120 0x0805775f in rb_eval (self=1075530552, n=0x0) at eval.c:3070 #121 0x0805c228 in rb_call0 (klass=1076186120, recv=1075530552, id=5089, oid=0, argc=0, argv=0x0, body=0x40256724, nosuper=0) at eval.c:5194 #122 0x0805c7b8 in rb_call (klass=1076186120, recv=1075530552, mid=5089, argc=0, argv=0x0, scope=0) at eval.c:5287 #123 0x0805788c in rb_eval (self=1076186120, n=0x0) at ruby.h:631 #124 0x0805c228 in rb_call0 (klass=1076186060, recv=1076186120, id=5089, oid=0, argc=0, argv=0xbfffe51c, body=0x40262e98, nosuper=0) at eval.c:5194 #125 0x0805c7b8 in rb_call (klass=1076186060, recv=1076186120, mid=5089, argc=1, argv=0xbfffe518, scope=0) at eval.c:5287 #126 0x0805788c in rb_eval (self=1075677712, n=0x0) at ruby.h:631 #127 0x08057b5d in rb_eval (self=1075677712, n=0x0) at ruby.h:636 #128 0x0805a278 in rb_yield_0 (val=1075531012, self=1075677712, klass=0, flags=0, avalue=2) at eval.c:4293 #129 0x0806113a in proc_invoke (proc=1076184540, args=1075531012, self=6, klass=2) at ruby.h:631 #130 0x0805f613 in call_end_proc (data=0) at eval.c:6609 #131 0x0805f8e6 in rb_exec_end_proc () at eval.c:6669 #132 0x08053aeb in ruby_finalize_0 () at eval.c:1372 #133 0x08053b6f in ruby_cleanup (ex=0) at eval.c:1400 #134 0x08053d71 in ruby_stop (ex=0) at eval.c:1447 #135 0x08053dbf in ruby_run () at eval.c:1459 #136 0x08051f65 in main (argc=0, argv=0x0, envp=0xbffff8f0) at main.c:50 #137 0x4008cda6 in __libc_start_main () from /lib/libc.so.6 -- Running Debian GNU/Linux Sid (unstable) batsman dot geo at yahoo dot com We are Pentium of Borg. Division is futile. You will be approximated. -- seen in someone's .signature