diff --git a/src/sharedspice.c b/src/sharedspice.c index 523deb426..b955764a7 100644 --- a/src/sharedspice.c +++ b/src/sharedspice.c @@ -1,4 +1,4 @@ -/* Copyright 2013 - 2018 Holger Vogt +/* Copyright 2013 - 2019 Holger Vogt * * Modified BSD license */ @@ -10,7 +10,7 @@ /*******************/ #ifdef _MSC_VER -#define SHAREDSPICE_version "30.0" +#define SHAREDSPICE_version "31.0" #define STDIN_FILENO 0 #define STDOUT_FILENO 1 #define STDERR_FILENO 2 @@ -330,8 +330,10 @@ _cthread_run(void *controls) if (!cont_condition) printf("Prepared to start controls after bg_run has finished\n"); pthread_mutex_lock(&triggerMutex); - while (!cont_condition) + cont_condition = FALSE; + do { pthread_cond_wait(&cond, &triggerMutex); + } while (!cont_condition); pthread_mutex_unlock(&triggerMutex); #endif fl_exited = FALSE; @@ -367,8 +369,11 @@ _thread_run(void *string) if (!nobgtrwanted) bgtr(fl_exited, ng_ident, userptr); #ifdef HAVE_LIBPTHREAD + pthread_mutex_lock(&triggerMutex); cont_condition = TRUE; pthread_cond_signal(&cond); + pthread_mutex_unlock(&triggerMutex); + pthread_join(tid2, NULL); #elif defined _MSC_VER || defined __MINGW32__ ResumeThread(tid2); #else @@ -443,7 +448,6 @@ exec_controls(wordlist *newcontrols) cont_condition = FALSE; usleep(20000); /* wait a little */ pthread_create(&tid2, NULL, (void * (*)(void *))_cthread_run, (void *)shcontrols); - pthread_detach(tid2); /* automatically release the memory after thread has finished */ #elif defined _MSC_VER || defined __MINGW32__ tid2 = (HANDLE)_beginthreadex(NULL, 0, (unsigned int(__stdcall *)(void *))_cthread_run, (void*)shcontrols, CREATE_SUSPENDED, NULL);