1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-12-12 09:28:24 +00:00

Backport: Make checking for liveness of global values more precise.

We can't just use a hash lookup because a global and a local reference
might refer to the same Lisp object.

* src/emacs-module.c (module_free_global_ref): More precise check for
global liveness.

(cherry picked from commit 9f01ce6327)
This commit is contained in:
Philipp Stephani 2020-07-25 23:23:19 +02:00
parent 8c94ca94dc
commit d767418b76

View File

@ -448,6 +448,14 @@ module_free_global_ref (emacs_env *env, emacs_value ref)
Lisp_Object obj = value_to_lisp (ref);
ptrdiff_t i = hash_lookup (h, obj, NULL);
if (module_assertions)
{
ptrdiff_t n = 0;
if (! module_global_reference_p (ref, &n))
module_abort ("Global value was not found in list of %"pD"d globals",
n);
}
if (i >= 0)
{
Lisp_Object value = HASH_VALUE (h, i);
@ -456,11 +464,6 @@ module_free_global_ref (emacs_env *env, emacs_value ref)
if (--ref->refcount == 0)
hash_remove_from_table (h, obj);
}
else if (module_assertions)
{
module_abort ("Global value was not found in list of %"pD"d globals",
h->count);
}
}
static enum emacs_funcall_exit