From 033811ceec6a2b1cb12c14cb932c0bf583e79020 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 20 Nov 2015 13:48:54 -0800 Subject: [PATCH] Fix double-decrement bug when freeing global refs * src/emacs-module.c (module_free_global_ref): Add a FIXME comment about error reporting. Fix a recently-introduced typo that double-decremented the refcount. --- src/emacs-module.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/emacs-module.c b/src/emacs-module.c index 84072b9917e..e730ca35ae5 100644 --- a/src/emacs-module.c +++ b/src/emacs-module.c @@ -293,6 +293,8 @@ module_free_global_ref (emacs_env *env, emacs_value ref) check_main_thread (); eassert (module_non_local_exit_check (env) == emacs_funcall_exit_return); /* TODO: This probably never signals. */ + /* FIXME: Wait a minute. Shouldn't this function report an error if + the hash lookup fails? */ MODULE_HANDLE_SIGNALS_VOID; eassert (HASH_TABLE_P (Vmodule_refs_hash)); struct Lisp_Hash_Table *h = XHASH_TABLE (Vmodule_refs_hash); @@ -307,7 +309,7 @@ module_free_global_ref (emacs_env *env, emacs_value ref) EMACS_INT refcount = XFASTINT (value) - 1; if (refcount > 0) { - value = make_natnum (refcount - 1); + value = make_natnum (refcount); set_hash_value_slot (h, i, value); } else -- 2.39.2