diff --git a/src/sbbs3/js_rtpool.c b/src/sbbs3/js_rtpool.c index 6de34fc2c4b3483da36b6d695fa970aef9ace0c7..da8587097c24cf8d7558ba5f20755957829c2c5d 100644 --- a/src/sbbs3/js_rtpool.c +++ b/src/sbbs3/js_rtpool.c @@ -25,18 +25,24 @@ static void trigger_thread(void *args) } } +static void +jsrt_init(void) +{ + initialized=TRUE; + pthread_mutex_init(&jsrt_mutex, NULL); + pthread_mutex_lock(&jsrt_mutex); + listInit(&rt_list, 0); + pthread_mutex_unlock(&jsrt_mutex); + _beginthread(trigger_thread, TRIGGER_THREAD_STACK_SIZE, NULL); +} + +static pthread_once_t jsrt_once = PTHREAD_ONCE_INIT; JSRuntime * jsrt_GetNew(int maxbytes, unsigned long timeout, const char *filename, long line) { JSRuntime *ret; - if(!initialized) { - initialized=TRUE; - pthread_mutex_init(&jsrt_mutex, NULL); - pthread_mutex_lock(&jsrt_mutex); - listInit(&rt_list, 0); - _beginthread(trigger_thread, TRIGGER_THREAD_STACK_SIZE, NULL); - } else - pthread_mutex_lock(&jsrt_mutex); + pthread_once(&jsrt_once, jsrt_init); + pthread_mutex_lock(&jsrt_mutex); ret=JS_NewRuntime(maxbytes); listPushNode(&rt_list, ret); pthread_mutex_unlock(&jsrt_mutex);