added moo_deregallfinalizables()

removed some unused code
This commit is contained in:
hyunghwan.chung
2018-05-16 08:03:34 +00:00
parent f260c04b4e
commit ca12fc082f
6 changed files with 61 additions and 79 deletions

View File

@ -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");
}

View File

@ -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;

View File

@ -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 */