On Sep 28, 2009, at 18:42, Neil Jerram wrote:
Regarding the throw from critical section problem, I guess I'm not
seeing this because of not running on a multi-core machine.
You're on a single-core machine? How quaint! ;-)
Can someone
who does see this problem
- run under GDB
- set a breakpoint on the fprintf (stderr, "throw from within critical
section.\n") line in throw.c
- post the thread backtraces (thread apply all bt), when this
breakpoint
is hit?
My Mac shows the problem almost instantly. The requested stack trace
is below.
I also note that according to gdb, scm-i_critical_section_level is
zero, though this breakpoint is only reachable if it's nonzero;
presumably another running thread changed it?
Thread 3 (process 53308 thread 0x1cb):
#0 0x973b5286 in mach_msg_trap ()
#1 0x973bca7c in mach_msg ()
#2 0x973d92ee in mach_port_deallocate ()
#3 0x002a5470 in GC_delete_thread ()
#4 0x002a59dd in GC_unregister_my_thread ()
#5 0x973e8b9a in _pthread_exit ()
#6 0x001d73d0 in really_launch (d=0xbfffe8b0) at ../../libguile/
threads.c:804
#7 0x0015d712 in c_body (d=0xbfffe8b0) at ../../libguile/
continuations.c:318
#8 0x001d9b95 in scm_c_catch (tag=0x0, body=0x15d700 <c_body>,
body_data=0xb0080e64, handler=0x15d720 <c_handler>,
handler_data=0xb0080e64, pre_unwind_handler=0,
pre_unwind_handler_data=0x0) at ../../libguile/throw.c:243
#9 0x0015d6dd in scm_i_with_continuation_barrier (body=0,
body_data=0x0, handler=0, handler_data=0x0, pre_unwind_handler=0,
pre_unwind_handler_data=0x0) at ../../libguile/continuations.c:294
#10 0x0015d78e in scm_c_with_continuation_barrier (func=0, data=0x0)
at ../../libguile/continuations.c:336
#11 0x001d71d9 in scm_i_with_guile_and_parent (func=0x1d7340
<really_launch>, data=0x1031358, parent=0x973b5286) at ../../libguile/
threads.c:709
#12 0x001d742a in launch_thread (d=0x555720) at ../../libguile/
threads.c:814
#13 0x002a5ddd in GC_inner_start_routine ()
#14 0x002a0a2c in GC_call_with_stack_base ()
#15 0x002a5e62 in GC_start_routine ()
#16 0x973e6155 in _pthread_start ()
#17 0x973e6012 in thread_start ()
Thread 2 (process 53308 thread 0x2003):
#0 0x973d8f9a in read$UNIX2003 ()
#1 0x001b115a in signal_delivery_thread (data=0x0) at ../../libguile/
scmsigs.c:164
#2 0x001d9b95 in scm_c_catch (tag=0xc0003, body=0x1b1100
<signal_delivery_thread>, body_data=0x0, handler=0x1da840
<scm_handle_by_message>, handler_data=0x20a8c4,
pre_unwind_handler=0xc0003, pre_unwind_handler_data=0xc0003) at ../../
libguile/throw.c:243
#3 0x001d9d0d in scm_internal_catch (tag=0xc0003, body=0xc0003,
body_data=0xc0003, handler=0xc0003, handler_data=0xc0003) at ../../
libguile/throw.c:257
#4 0x001d74d6 in really_spawn (d=0xb0080b00) at ../../libguile/
threads.c:891
#5 0x0015d712 in c_body (d=0xb0080b00) at ../../libguile/
continuations.c:318
#6 0x001d9b95 in scm_c_catch (tag=0xc0003, body=0x15d700 <c_body>,
body_data=0xb0102e64, handler=0x15d720 <c_handler>,
handler_data=0xb0102e64, pre_unwind_handler=0xc0003,
pre_unwind_handler_data=0xc0003) at ../../libguile/throw.c:243
#7 0x0015d6dd in scm_i_with_continuation_barrier (body=0xc0003,
body_data=0xc0003, handler=0xc0003, handler_data=0xc0003,
pre_unwind_handler=0xc0003, pre_unwind_handler_data=0xc0003) at ../../
libguile/continuations.c:294
#8 0x0015d78e in scm_c_with_continuation_barrier (func=0xc0003,
data=0xc0003) at ../../libguile/continuations.c:336
#9 0x001d71d9 in scm_i_with_guile_and_parent (func=0x1d7440
<really_spawn>, data=0x10275d8, parent=0x973d8f9a) at ../../libguile/
threads.c:709
#10 0x001d754a in spawn_thread (d=0x555be0) at ../../libguile/
threads.c:903
#11 0x002a5ddd in GC_inner_start_routine ()
#12 0x002a0a2c in GC_call_with_stack_base ()
#13 0x002a5e62 in GC_start_routine ()
#14 0x973e6155 in _pthread_start ()
#15 0x973e6012 in thread_start ()
Thread 1 (process 53308 local thread 0x3b07):
#0 scm_ithrow (key=0x59ad50, args=0x404, noreturn=1) at ../../
libguile/throw.c:746
#1 0x001dadda in scm_throw (key=0x59ad50, args=0x404) at ../../
libguile/throw.c:722
#2 0x00181c51 in gsubr_apply_raw (proc=0x56fe90, argc=<value
temporarily unavailable, due to optimizations>, argv=0xbfffe21c)
at ../../libguile/gsubr.c:212
#3 0x00181e91 in scm_i_gsubr_apply_list (self=0x56fe90,
args=0x102f210) at ../../libguile/gsubr.c:316
#4 0x0016d25b in scm_dapply (proc=<value temporarily unavailable, due
to optimizations>, arg1=0x59ad50, args=0x102f210) at eval.i.c:1903
#5 0x001e7659 in vm_debug_engine (vp=0x596fa0, program=<value
temporarily unavailable, due to optimizations>, argv=0x0, nargs=<value
temporarily unavailable, due to optimizations>) at vm-i-system.c:605
#6 0x00172d71 in scm_call_0 (proc=0x1004090) at ../../libguile/eval.c:
3113
#7 0x001750ce in scm_c_with_fluid (fluid=0x216920, value=0x216920,
cproc=0x175020 <apply_thunk>, cdata=0x216920) at ../../libguile/
fluids.c:382
#8 0x00175110 in scm_with_fluid (fluid=0x216920, value=0x216920,
thunk=0x216920) at ../../libguile/fluids.c:369
#9 0x0016d7cc in scm_dapply (proc=<value temporarily unavailable, due
to optimizations>, arg1=0x102f2c8, args=<value temporarily
unavailable, due to optimizations>) at eval.i.c:1793
#10 0x001e7659 in vm_debug_engine (vp=0x596fa0, program=<value
temporarily unavailable, due to optimizations>, argv=0x0, nargs=<value
temporarily unavailable, due to optimizations>) at vm-i-system.c:605
#11 0x00172d71 in scm_call_0 (proc=0x1004020) at ../../libguile/eval.c:
3113
#12 0x001d9b95 in scm_c_catch (tag=0x216920, body=0x1da0c0
<scm_body_thunk>, body_data=0xbfffe7b8, handler=0x1da0e0
<scm_handle_by_proc>, handler_data=0xbfffe7d8,
pre_unwind_handler=0x216920 <scm_i_critical_section_level>,
pre_unwind_handler_data=0x216920) at ../../libguile/throw.c:243
#13 0x001da279 in scm_catch_with_pre_unwind_handler (key=0x104,
thunk=0x1004020, handler=0x1004000, pre_unwind_handler=0x204) at ../../
libguile/throw.c:627
#14 0x00181c51 in gsubr_apply_raw (proc=0x56ffb0, argc=<value
temporarily unavailable, due to optimizations>, argv=0xbfffe85c)
at ../../libguile/gsubr.c:212
#15 0x00181efc in scm_i_gsubr_apply_list (self=0x56ffb0,
args=0x102f380) at ../../libguile/gsubr.c:316
#16 0x0016d25b in scm_dapply (proc=<value temporarily unavailable, due
to optimizations>, arg1=0x104, args=0x102f380) at eval.i.c:1903
#17 0x001ecfa7 in vm_debug_engine (vp=0x596fa0, program=<value
temporarily unavailable, due to optimizations>, argv=0x0, nargs=<value
temporarily unavailable, due to optimizations>) at vm-i-system.c:689
#18 0x001ddf1d in scm_load_compiled_with_vm (file=0x216920) at ../../
libguile/vm.c:627
#19 0x0016d07a in scm_dapply (proc=0x2a4f9a, arg1=0x10b26b0,
args=0x404) at eval.i.c:1804
#20 0x001e7659 in vm_debug_engine (vp=0x596fa0, program=<value
temporarily unavailable, due to optimizations>, argv=0x0, nargs=<value
temporarily unavailable, due to optimizations>) at vm-i-system.c:605
#21 0x00172d71 in scm_call_0 (proc=0x10137e0) at ../../libguile/eval.c:
3113
#22 0x001750ce in scm_c_with_fluid (fluid=0x216920, value=0x216920,
cproc=0x175020 <apply_thunk>, cdata=0x216920) at ../../libguile/
fluids.c:382
#23 0x00175110 in scm_with_fluid (fluid=0x216920, value=0x216920,
thunk=0x216920) at ../../libguile/fluids.c:369
#24 0x0016d7cc in scm_dapply (proc=<value temporarily unavailable, due
to optimizations>, arg1=0x1047540, args=<value temporarily
unavailable, due to optimizations>) at eval.i.c:1793
#25 0x001e7659 in vm_debug_engine (vp=0x596fa0, program=<value
temporarily unavailable, due to optimizations>, argv=0x0, nargs=<value
temporarily unavailable, due to optimizations>) at vm-i-system.c:605
#26 0x00172d71 in scm_call_0 (proc=0x1013820) at ../../libguile/eval.c:
3113
#27 0x001622d3 in scm_dynamic_wind (in_guard=0x1013810,
thunk=0x1013820, out_guard=0x10137f0) at ../../libguile/dynwind.c:112
#28 0x0016d7cc in scm_dapply (proc=<value temporarily unavailable, due
to optimizations>, arg1=0x1047580, args=<value temporarily
unavailable, due to optimizations>) at eval.i.c:1793
#29 0x001e7659 in vm_debug_engine (vp=0x596fa0, program=<value
temporarily unavailable, due to optimizations>, argv=0xbffff18c,
nargs=<value temporarily unavailable, due to optimizations>) at vm-i-
system.c:605
#30 0x00170add in ceval (x=0x404, env=0x1047c78) at eval.i.c:1247
#31 0x00171726 in ceval (x=<value temporarily unavailable, due to
optimizations>, env=0x1047c78) at eval.i.c:330
#32 0x00172f2a in scm_primitive_eval_x (exp=0x1046288) at ../../
libguile/eval.c:4060
#33 0x00172f93 in scm_eval_x (exp=0x216920, module_or_state=0x10118a0)
at ../../libguile/eval.c:4095
#34 0x001b360f in scm_shell (argc=3, argv=0xbffff590) at ../../
libguile/script.c:771
#35 0x001892a1 in invoke_main_func (body_data=0xbffff530) at ../../
libguile/init.c:378
#36 0x0015d712 in c_body (d=0xbffff4a4) at ../../libguile/
continuations.c:318
#37 0x001d9b95 in scm_c_catch (tag=0x216920, body=0x15d700 <c_body>,
body_data=0xbffff4a4, handler=0x15d720 <c_handler>,
handler_data=0xbffff4a4, pre_unwind_handler=0x216920
<scm_i_critical_section_level>, pre_unwind_handler_data=0x216920)
at ../../libguile/throw.c:243
#38 0x0015d6dd in scm_i_with_continuation_barrier (body=0x216920
<scm_i_critical_section_level>, body_data=0x216920, handler=0x216920
<scm_i_critical_section_level>, handler_data=0x216920,
pre_unwind_handler=0x216920 <scm_i_critical_section_level>,
pre_unwind_handler_data=0x216920) at ../../libguile/continuations.c:294
#39 0x0015d78e in scm_c_with_continuation_barrier (func=0x216920
<scm_i_critical_section_level>, data=0x216920) at ../../libguile/
continuations.c:336
#40 0x001d71d9 in scm_i_with_guile_and_parent (func=0x189260
<invoke_main_func>, data=0x558dc8, parent=0x1) at ../../libguile/
threads.c:709
#41 0x001d7239 in scm_with_guile (func=0x216920
<scm_i_critical_section_level>, data=0x216920) at ../../libguile/
threads.c:688
#42 0x0018923a in scm_boot_guile (argc=2189600, argv=0x216920,
main_func=0x216920 <scm_i_critical_section_level>, closure=0x216920)
at ../../libguile/init.c:361
#43 0x00001ff1 in main (argc=2189600, argv=0x216920) at ../../libguile/
guile.c:70
(gdb)
Ken