mirror of
https://gitlab.com/embeddable-common-lisp/ecl.git
synced 2026-01-16 06:12:25 -08:00
Create ecl_set_finalizer_unprotected() for situations in which a finalizer must be set with interrupts disallowed.
This commit is contained in:
parent
ca6198d753
commit
a35ba14206
2 changed files with 13 additions and 6 deletions
|
|
@ -549,13 +549,9 @@ si_get_finalizer(cl_object o)
|
|||
@(return output)
|
||||
}
|
||||
|
||||
cl_object
|
||||
si_set_finalizer(cl_object o, cl_object finalizer)
|
||||
void
|
||||
ecl_set_finalizer_unprotected(cl_object o, cl_object finalizer)
|
||||
{
|
||||
const cl_env_ptr the_env = ecl_process_env();
|
||||
GC_finalization_proc ofn;
|
||||
void *odata;
|
||||
ecl_disable_interrupts_env(the_env);
|
||||
if (finalizer == Cnil) {
|
||||
GC_register_finalizer_no_order(o, (GC_finalization_proc)0,
|
||||
0, &ofn, &odata);
|
||||
|
|
@ -565,6 +561,16 @@ si_set_finalizer(cl_object o, cl_object finalizer)
|
|||
GC_register_finalizer_no_order(o, newfn, finalizer,
|
||||
&ofn, &odata);
|
||||
}
|
||||
}
|
||||
|
||||
cl_object
|
||||
si_set_finalizer(cl_object o, cl_object finalizer)
|
||||
{
|
||||
const cl_env_ptr the_env = ecl_process_env();
|
||||
GC_finalization_proc ofn;
|
||||
void *odata;
|
||||
ecl_disable_interrupts_env(the_env);
|
||||
ecl_set_finalizer_unprotected(o, finalizer);
|
||||
ecl_enable_interrupts_env(the_env);
|
||||
@(return)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -657,6 +657,7 @@ extern ECL_API int ecl_stream_to_handle(cl_object s, bool output);
|
|||
|
||||
/* finalize.c */
|
||||
|
||||
extern ECL_API void ecl_set_finalizer_unprotected(cl_object o, cl_object finalizer);
|
||||
extern ECL_API cl_object si_get_finalizer(cl_object o);
|
||||
extern ECL_API cl_object si_set_finalizer(cl_object o, cl_object finalizer);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue