]> Nishi Git Mirror - gwion.git/commitdiff
:art: More on concurency
authorJérémie Astor <astor.jeremie@wanadoo.fr>
Fri, 6 Dec 2019 20:41:42 +0000 (21:41 +0100)
committerJérémie Astor <astor.jeremie@wanadoo.fr>
Fri, 6 Dec 2019 20:41:56 +0000 (21:41 +0100)
src/lib/shred.c
src/main.c

index 7f9daa51e04533058e1dfe4e30b0e8709117af7c..b878c537937edabe4e1b02ba3ae6499967d919c3 100644 (file)
@@ -215,6 +215,7 @@ void fork_retval(const M_Object o) {
 static ANN void* fork_run(void* data) {
   VM *vm = (VM*)data;
   const M_Object me = vm->shreduler->list->self->info->me;
+//++me->ref;
   while(vm->bbq->is_running) {
     vm_run(vm);
     ++vm->bbq->pos;
@@ -224,7 +225,7 @@ static ANN void* fork_run(void* data) {
     fork_retval(me);
     *(m_int*)(me->data + o_fork_done) = 1;
     broadcast(*(M_Object*)(me->data + o_fork_ev));
-  } else
+  } else if(me->ref > 1)
     release(me, ME(me));
   vm_unlock(vm->parent);
   THREAD_RETURN(NULL);
@@ -235,7 +236,7 @@ ANN void fork_launch(VM const* vm, const M_Object o, const m_uint sz) {
   if(vm_running(vm)) {
     FORK_RETSIZE(o) = sz;
     THREAD_CREATE(FORK_THREAD(o), fork_run, ME(o)->info->vm);
-  }
+  } else release(o, ME(o));
   vm_unlock(vm);
 }
 
index 1d7f6dd57ef320517cf957d066bba132bf534a35..0108e477c5193d81cbc6f26d6d96c0d4c30d6aee 100644 (file)
@@ -10,6 +10,7 @@ static void sig(int unused NUSED) {
 #ifdef BUILD_ON_WINDOWS
   exit(EXIT_FAILURE);
 #else
+  pthread_kill(pthread_self(), SIGTERM);
   pthread_exit(NULL);
 #endif
 }