summaryrefslogtreecommitdiffstats
path: root/signal.h
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2014-08-25 21:24:16 -0700
committerKaz Kylheku <kaz@kylheku.com>2014-08-25 21:24:16 -0700
commit6439f7121b3a75d48d0db2e75c663de754a84c9c (patch)
treee337823f7c6c85dc11a469c98c3a0f89e78aad06 /signal.h
parentce496a342712083526d424d965a6fa689b6b09cb (diff)
downloadtxr-6439f7121b3a75d48d0db2e75c663de754a84c9c.tar.gz
txr-6439f7121b3a75d48d0db2e75c663de754a84c9c.tar.bz2
txr-6439f7121b3a75d48d0db2e75c663de754a84c9c.zip
* gc.c (top): Renamed to gc_prot_top, turned extern.
(prot1, rel1, mark): Follow rename. * gc.h (gc_prot_top): Declared. * signal.h (extended_jmp_buf): New member, gc_pt. (extended_setjmp): Save and restore gc_prot_top.
Diffstat (limited to 'signal.h')
-rw-r--r--signal.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/signal.h b/signal.h
index 4fe9d823..0bbff153 100644
--- a/signal.h
+++ b/signal.h
@@ -63,6 +63,7 @@ typedef struct {
sigset_t blocked;
val de;
int gc;
+ val **gc_pt;
int rv;
} extended_jmp_buf;
@@ -70,13 +71,16 @@ typedef struct {
(setjmp((EJB).jb) \
? (async_sig_enabled = (EJB).se, \
dyn_env = (EJB).de, \
- gc_enabled = ((EJB).gc), \
+ gc_enabled = (EJB).gc, \
+ gc_prot_top = (EJB).gc_pt, \
sig_mask(SIG_SETMASK, &(EJB).blocked, 0), \
(EJB).rv) \
: ((EJB).se = async_sig_enabled, \
(EJB).de = dyn_env, \
(EJB).gc = gc_enabled, \
- (EJB).blocked = sig_blocked_cache, 0))
+ (EJB).gc_pt = gc_prot_top, \
+ (EJB).blocked = sig_blocked_cache, \
+ 0))
#define extended_longjmp(EJB, ARG) \
((EJB).rv = (ARG), longjmp((EJB).jb, 1))
@@ -96,6 +100,7 @@ typedef struct {
jmp_buf jb;
val de;
int gc;
+ val **gc_pt;
int rv;
} extended_jmp_buf;
@@ -103,9 +108,11 @@ typedef struct {
(setjmp((EJB).jb) \
? (dyn_env = (EJB).de, \
gc_enabled = ((EJB).gc), \
+ gc_prot_top = (EJB).gc_pt, \
(EJB).rv) \
: ((EJB).de = dyn_env, \
(EJB).gc = gc_enabled, \
+ (EJB).gc_pt = gc_prot_top, \
0))
#define extended_longjmp(EJB, ARG) \