mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
scm_report_stack_overflow eventually resets scm_stack_checking_enabled_p
* libguile/stackchk.c (scm_report_stack_overflow): Surround in a dynwind, so that scm_stack_checking_enabled_p is reset when the error throws.
This commit is contained in:
parent
d0110327ab
commit
138bf22d82
1 changed files with 17 additions and 1 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995,1996,1997, 2000, 2001, 2006, 2008 Free Software Foundation, Inc.
|
/* Copyright (C) 1995,1996,1997, 2000, 2001, 2006, 2008, 2010 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public License
|
* modify it under the terms of the GNU Lesser General Public License
|
||||||
|
@ -26,6 +26,7 @@
|
||||||
#include "libguile/ports.h"
|
#include "libguile/ports.h"
|
||||||
#include "libguile/root.h"
|
#include "libguile/root.h"
|
||||||
#include "libguile/threads.h"
|
#include "libguile/threads.h"
|
||||||
|
#include "libguile/dynwind.h"
|
||||||
|
|
||||||
#include "libguile/stackchk.h"
|
#include "libguile/stackchk.h"
|
||||||
|
|
||||||
|
@ -38,15 +39,30 @@ int scm_stack_checking_enabled_p;
|
||||||
|
|
||||||
SCM_SYMBOL (scm_stack_overflow_key, "stack-overflow");
|
SCM_SYMBOL (scm_stack_overflow_key, "stack-overflow");
|
||||||
|
|
||||||
|
static void
|
||||||
|
reset_scm_stack_checking_enabled_p (void *arg)
|
||||||
|
{
|
||||||
|
scm_stack_checking_enabled_p = (int)(scm_t_bits)arg;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
scm_report_stack_overflow ()
|
scm_report_stack_overflow ()
|
||||||
{
|
{
|
||||||
|
scm_dynwind_begin (0); /* non-rewindable frame */
|
||||||
|
scm_dynwind_unwind_handler (reset_scm_stack_checking_enabled_p,
|
||||||
|
(void*)(scm_t_bits)scm_stack_checking_enabled_p,
|
||||||
|
SCM_F_WIND_EXPLICITLY);
|
||||||
|
|
||||||
scm_stack_checking_enabled_p = 0;
|
scm_stack_checking_enabled_p = 0;
|
||||||
|
|
||||||
scm_error (scm_stack_overflow_key,
|
scm_error (scm_stack_overflow_key,
|
||||||
NULL,
|
NULL,
|
||||||
"Stack overflow",
|
"Stack overflow",
|
||||||
SCM_BOOL_F,
|
SCM_BOOL_F,
|
||||||
SCM_BOOL_F);
|
SCM_BOOL_F);
|
||||||
|
|
||||||
|
/* not reached */
|
||||||
|
scm_dynwind_end ();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue