]> Nishi Git Mirror - gwion.git/commitdiff
:art: Improve fork_cleaning
authorJérémie Astor <astor.jeremie@wanadoo.fr>
Mon, 2 Dec 2019 22:53:05 +0000 (23:53 +0100)
committerJérémie Astor <astor.jeremie@wanadoo.fr>
Mon, 2 Dec 2019 22:53:05 +0000 (23:53 +0100)
src/lib/shred.c

index a139a6e3986d0e9b59edbb7a9c80ff45443a4785..c1f3cfd9530c79a41476cc7e06fe44947caac603 100644 (file)
@@ -149,7 +149,8 @@ static DTOR(fork_dtor) {
   THREAD_JOIN(FORK_THREAD(o));
   const VM *vm = ME(o)->info->vm->parent;
   if(*(m_int*)(o->data + o_fork_done)) {
-    vector_rem2(&vm->gwion->data->child, (vtype)o);
+    const m_int idx = vector_find(&vm->gwion->data->child, (vtype)o);
+    VPTR(&vm->gwion->data->child, idx) = 0;
     if(!vm->gwion->data->child2.ptr)
       vector_init(&vm->gwion->data->child2);
     vector_add(&vm->gwion->data->child2, (vtype)ME(o)->info->vm->gwion);
@@ -222,6 +223,8 @@ ANN void fork_launch(const VM* vm, const M_Object o, const m_uint sz) {
 ANN void fork_clean(const VM_Shred shred, const Vector v) {
   for(m_uint i = 0; i < vector_size(v); ++i) {
     const M_Object o = (M_Object)vector_at(v, i);
+    if(!o)
+      continue;
     THREAD_JOIN(FORK_THREAD(o));
     release(o, shred);
   }