]> Nishi Git Mirror - gwion.git/commitdiff
:bomb: Fork memory things
authorJérémie Astor <fennecdjay@gmail.com>
Mon, 14 Dec 2020 19:01:11 +0000 (20:01 +0100)
committerJérémie Astor <fennecdjay@gmail.com>
Mon, 14 Dec 2020 19:01:11 +0000 (20:01 +0100)
src/lib/shred.c
src/vm/vm.c

index a9c9ddcb605a39b9038720364d9618466059397c..25dcb175213ce1c7fbefc312d20a8d24742f55ca 100644 (file)
@@ -177,7 +177,7 @@ static void stop(const M_Object o) {
   MUTEX_UNLOCK(vm->shreduler->mutex);
 }
 
-static void join(const M_Object o) {
+static inline void join(const M_Object o) {
   if(FORK_THREAD(o)) {
     THREAD_JOIN(FORK_THREAD(o));
     FORK_THREAD(o) = 0;
@@ -187,6 +187,7 @@ static void join(const M_Object o) {
 static DTOR(fork_dtor) {
   *(m_int*)(o->data + o_fork_done) = 1;
   stop(o);
+  join(o);
   VM *parent = ME(o)->info->vm->parent;
   MUTEX_LOCK(parent->shreduler->mutex);
   if(parent->gwion->data->child.ptr) {
index d010c946218b7bbf67fc9beb2ffac78b595a4c6c..d9c2800289fc05337c3135b7bf05da95c7aa017a 100644 (file)
@@ -129,6 +129,7 @@ ANN static inline VM_Shred init_spork_shred(const VM_Shred shred, const VM_Code
   if(!shred->tick->child.ptr)
     vector_init(&shred->tick->child);
   vector_add(&shred->tick->child, (vtype)sh);
+  vector_add(&shred->gc, (vtype)sh->info->me);
   return sh;
 }