added moo_deregallfinalizables()
removed some unused code
This commit is contained in:
@ -193,6 +193,11 @@ static MOO_INLINE void vm_cleanup (moo_t* moo)
|
||||
moo->sem_gcfin = (moo_oop_semaphore_t)moo->_nil;
|
||||
moo->sem_gcfin_sigreq = 0;
|
||||
|
||||
/* deregister all pending finalizable objects pending just in case these
|
||||
* have not been removed for various reasons. (e.g. sudden VM abortion)
|
||||
*/
|
||||
moo_deregallfinalizables (moo);
|
||||
|
||||
MOO_DEBUG0 (moo, "VM cleaned up\n");
|
||||
}
|
||||
|
||||
|
20
moo/lib/gc.c
20
moo/lib/gc.c
@ -1088,14 +1088,34 @@ int moo_deregfinalizable (moo_t* moo, moo_oop_t oop)
|
||||
{
|
||||
MOO_OBJ_SET_FLAGS_GCFIN(oop, (MOO_OBJ_GET_FLAGS_GCFIN(oop) & ~MOO_GCFIN_FINALIZABLE));
|
||||
MOO_DELETE_FROM_LIST (&moo->finalizable, x);
|
||||
moo_freemem (moo, x);
|
||||
return 0;
|
||||
}
|
||||
x = x->next;
|
||||
}
|
||||
|
||||
moo_seterrnum (moo, MOO_ENOENT);
|
||||
return -1;
|
||||
}
|
||||
|
||||
void moo_deregallfinalizables (moo_t* moo)
|
||||
{
|
||||
moo_finalizable_t* x, * nx;
|
||||
|
||||
x = moo->finalizable.first;
|
||||
while (x)
|
||||
{
|
||||
nx = x->next;
|
||||
MOO_OBJ_SET_FLAGS_GCFIN(x->oop, (MOO_OBJ_GET_FLAGS_GCFIN(x->oop) & ~MOO_GCFIN_FINALIZABLE));
|
||||
MOO_DELETE_FROM_LIST (&moo->finalizable, x);
|
||||
moo_freemem (moo, x);
|
||||
x = nx;
|
||||
}
|
||||
|
||||
MOO_ASSERT (moo, moo->finalizable.first == MOO_NULL);
|
||||
MOO_ASSERT (moo, moo->finalizable.last == MOO_NULL);
|
||||
}
|
||||
|
||||
static moo_oow_t move_finalizable_objects (moo_t* moo)
|
||||
{
|
||||
moo_finalizable_t* x, * y;
|
||||
|
@ -1194,6 +1194,7 @@ moo_oop_nsdic_t moo_makensdic (
|
||||
/* ========================================================================= */
|
||||
int moo_regfinalizable (moo_t* moo, moo_oop_t oop);
|
||||
int moo_deregfinalizable (moo_t* moo, moo_oop_t oop);
|
||||
void moo_deregallfinalizables (moo_t* moo);
|
||||
|
||||
/* ========================================================================= */
|
||||
/* proc.c */
|
||||
|
Reference in New Issue
Block a user