mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-14 15:40:19 +02:00
Make sure the whole VM stack is always scanned by the GC.
Thanks to Andy for noticing this. * libguile/vm-engine.h (SYNC_REGISTER, CACHE_REGISTER): Add comment. * libguile/vm-i-scheme.c (make_struct): Call `SYNC_REGISTER ()' in all cases since the GC is going to run. (struct_ref, struct_set): Call `SYNC_REGISTER ()' on the slow path. (BV_REF_WITH_ENDIANNESS, BV_FIXABLE_INT_REF, BV_INT_REF): Likewise. (BV_FLOAT_REF): Always `SYNC_REGISTER ()'.
This commit is contained in:
parent
deec8986ff
commit
9823fd399c
2 changed files with 60 additions and 42 deletions
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2001, 2009 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2001, 2009, 2010 Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
|
@ -102,6 +102,7 @@
|
|||
#endif
|
||||
|
||||
|
||||
/* Cache the VM's instruction, stack, and frame pointer in local variables. */
|
||||
#define CACHE_REGISTER() \
|
||||
{ \
|
||||
ip = vp->ip; \
|
||||
|
@ -109,6 +110,9 @@
|
|||
fp = vp->fp; \
|
||||
}
|
||||
|
||||
/* Update the registers in VP, a pointer to the current VM. This must be done
|
||||
at least before any GC invocation so that `vp->sp' is up-to-date and the
|
||||
whole stack gets marked. */
|
||||
#define SYNC_REGISTER() \
|
||||
{ \
|
||||
vp->ip = ip; \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue