mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-11 09:20:51 +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:
parent
8c94ca94dc
commit
d767418b76
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user