active_asyncs.
* root.h (scm_root_state): Added pending_asyncs and signal_asyncs
fields.
* root.c (root_mark): Mark them.
(make_root): Initialize them.
#define SCM_ASYNC_TICK /*fixme* should change names */ \
do { \
- if (scm_root->active_asyncs != SCM_EOL) \
+ if (scm_root->pending_asyncs) \
scm_async_click (); \
} while (0)
/* No need to gc mark def_loadp */
scm_gc_mark (s->fluids);
scm_gc_mark (s->active_asyncs);
+ scm_gc_mark (s->signal_asyncs);
return SCM_ROOT_STATE (root) -> parent;
}
}
root_state->active_asyncs = SCM_EOL;
+ root_state->signal_asyncs = SCM_EOL;
root_state->block_asyncs = 0;
+ root_state->pending_asyncs = 1;
SCM_REDEFER_INTS;
SCM_NEWSMOB (root, scm_tc16_root, root_state);
SCM active_asyncs; /* The thunks to be run at the next
safe point */
+ SCM signal_asyncs; /* The pre-queued cells for signal handlers.
+ */
unsigned int block_asyncs; /* Non-zero means that asyncs should
not be run. */
+ unsigned int pending_asyncs; /* Non-zero means that asyncs might be pending.
+ */
} scm_root_state;
#define scm_stack_base (scm_root->stack_base)