diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/alloc.c | 4 | ||||
| -rw-r--r-- | src/emacs-module.c | 14 | ||||
| -rw-r--r-- | src/lisp.h | 1 | 
3 files changed, 19 insertions, 0 deletions
diff --git a/src/alloc.c b/src/alloc.c index a1a85946ce0..ac3de83b2b6 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -5942,6 +5942,10 @@ garbage_collect_1 (void *end)    mark_fringe_data ();  #endif +#ifdef HAVE_MODULES +  mark_modules (); +#endif +    /* Everything is now marked, except for the data in font caches,       undo lists, and finalizers.  The first two are compacted by       removing an items which aren't reachable otherwise.  */ diff --git a/src/emacs-module.c b/src/emacs-module.c index bebfe594426..1a8c1768230 100644 --- a/src/emacs-module.c +++ b/src/emacs-module.c @@ -871,6 +871,7 @@ static void  initialize_environment (emacs_env *env, struct emacs_env_private *priv)  {    priv->pending_non_local_exit = emacs_funcall_exit_return; +  priv->non_local_exit_symbol = priv->non_local_exit_data = Qnil;    env->size = sizeof *env;    env->private_members = priv;    env->make_global_ref = module_make_global_ref; @@ -926,6 +927,19 @@ finalize_runtime_unwind (void* raw_ert)    finalize_environment (&ert->private_members->pub);  } +void +mark_modules (void) +{ +  Lisp_Object tail = Vmodule_environments; +  FOR_EACH_TAIL_SAFE (tail) +  { +    emacs_env *env = XSAVE_POINTER (XCAR (tail), 0); +    struct emacs_env_private *priv = env->private_members; +    mark_object (priv->non_local_exit_symbol); +    mark_object (priv->non_local_exit_data); +  } +} +  /* Non-local exit handling.  */ diff --git a/src/lisp.h b/src/lisp.h index c35bd1f6df1..ee703893e22 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -3958,6 +3958,7 @@ extern Lisp_Object make_user_ptr (void (*finalizer) (void *), void *p);  /* Defined in emacs-module.c.  */  extern Lisp_Object funcall_module (Lisp_Object, ptrdiff_t, Lisp_Object *);  extern Lisp_Object module_function_arity (const struct Lisp_Module_Function *); +extern void mark_modules (void);  extern void syms_of_module (void);  #endif  | 
