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:
parent
15aa239ba0
commit
93f92cf1ba
3 changed files with 17 additions and 2 deletions
|
|
@ -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))
|
||||
|
|
|
|||
14
src/comp.c
14
src/comp.c
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue