1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-04 11:00:45 -08:00

Zero stale pointer when unloading comp units (bug#46256)

* src/alloc.c (cleanup_vector): Call unload_comp_unit.
* src/comp.c (unload_comp_unit): New function.
This commit is contained in:
Pip Cet 2021-03-07 21:26:29 +00:00 committed by Andrea Corallo
parent 15aa239ba0
commit 93f92cf1ba
3 changed files with 17 additions and 2 deletions

View file

@ -3157,8 +3157,7 @@ cleanup_vector (struct Lisp_Vector *vector)
{
struct Lisp_Native_Comp_Unit *cu =
PSEUDOVEC_STRUCT (vector, Lisp_Native_Comp_Unit);
eassert (cu->handle);
dynlib_close (cu->handle);
unload_comp_unit (cu);
}
else if (NATIVE_COMP_FLAG
&& PSEUDOVECTOR_TYPEP (&vector->header, PVEC_SUBR))

View file

@ -4949,6 +4949,20 @@ load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u, bool loading_dump,
return res;
}
void
unload_comp_unit (struct Lisp_Native_Comp_Unit *cu)
{
if (cu->handle == NULL)
return;
Lisp_Object *saved_cu = dynlib_sym (cu->handle, COMP_UNIT_SYM);
Lisp_Object this_cu;
XSETNATIVE_COMP_UNIT (this_cu, cu);
if (EQ (this_cu, *saved_cu))
*saved_cu = Qnil;
dynlib_close (cu->handle);
}
Lisp_Object
native_function_doc (Lisp_Object function)
{

View file

@ -78,6 +78,8 @@ extern void hash_native_abi (void);
extern Lisp_Object load_comp_unit (struct Lisp_Native_Comp_Unit *comp_u,
bool loading_dump, bool late_load);
extern void unload_comp_unit (struct Lisp_Native_Comp_Unit *);
extern Lisp_Object native_function_doc (Lisp_Object function);
extern void syms_of_comp (void);