From 893fb8d0cc2bce5097bdaee999d214fa2f3e0d38 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 17 Sep 2010 10:59:36 +0200 Subject: [PATCH] vm hooks run without hooks * libguile/vm.c (vm_dispatch_hook): Run hooks with the trace-level set to 0. We really don't want hooks running while hooks are running. --- libguile/vm.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libguile/vm.c b/libguile/vm.c index c0237be87..01963f1c4 100644 --- a/libguile/vm.c +++ b/libguile/vm.c @@ -193,6 +193,7 @@ vm_dispatch_hook (SCM vm, int hook_num) struct scm_frame c_frame; scm_t_aligned_cell frame; SCM args[1]; + int saved_trace_level; vp = SCM_VM_DATA (vm); hook = vp->hooks[hook_num]; @@ -201,7 +202,8 @@ vm_dispatch_hook (SCM vm, int hook_num) || scm_is_null (SCM_HOOK_PROCEDURES (hook))) return; - vp->trace_level--; + saved_trace_level = vp->trace_level; + vp->trace_level = 0; /* Allocate a frame object on the stack. This is more efficient than calling `scm_c_make_frame ()' to allocate on the heap, but it forces hooks to not @@ -222,7 +224,7 @@ vm_dispatch_hook (SCM vm, int hook_num) scm_c_run_hookn (hook, args, 1); - vp->trace_level++; + vp->trace_level = saved_trace_level; } static void vm_abort (SCM vm, size_t n, scm_t_int64 cookie) SCM_NORETURN;