]> git.eshelyaron.com Git - emacs.git/commitdiff
Backport: Make checking for liveness of global values more precise.
authorPhilipp Stephani <phst@google.com>
Sat, 25 Jul 2020 21:23:19 +0000 (23:23 +0200)
committerPhilipp Stephani <phst@google.com>
Fri, 31 Jul 2020 16:18:43 +0000 (18:18 +0200)
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 9f01ce6327af886f26399924a9aadf16cdd4fd9f)

src/emacs-module.c

index 099a6a3cf25bbd6772866aa89ad576699e7d9260..a90a9765dbf69928f4316b5f27e0b8ad957f5c29 100644 (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