From 40da411fa5f55e40ad0c92afce5c8c725f68fb41 Mon Sep 17 00:00:00 2001 From: Dmitry Babokin Date: Wed, 20 Nov 2013 17:22:50 +0400 Subject: [PATCH 1/2] Fix task system dignostic to report real reason of the symaphore allocation fail --- examples/tasksys.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/tasksys.cpp b/examples/tasksys.cpp index c9c2fa7b..e0149952 100644 --- a/examples/tasksys.cpp +++ b/examples/tasksys.cpp @@ -696,7 +696,7 @@ InitTaskSystem() { sprintf(name, "ispc_task.%d", (int)getpid()); workerSemaphore = sem_open(name, O_CREAT, S_IRUSR|S_IWUSR, 0); if (!workerSemaphore) { - fprintf(stderr, "Error creating semaphore: %s\n", strerror(err)); + fprintf(stderr, "Error creating semaphore (%s): %s\n", name, strerror(errno)); exit(1); } From 5531586c356962bf2c53fc0dae932db52ad356c0 Mon Sep 17 00:00:00 2001 From: Dmitry Babokin Date: Wed, 20 Nov 2013 19:19:15 +0400 Subject: [PATCH 2/2] Fix for existing semaphore problem --- examples/tasksys.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/examples/tasksys.cpp b/examples/tasksys.cpp index e0149952..b97c4bba 100644 --- a/examples/tasksys.cpp +++ b/examples/tasksys.cpp @@ -693,9 +693,19 @@ InitTaskSystem() { } char name[32]; - sprintf(name, "ispc_task.%d", (int)getpid()); - workerSemaphore = sem_open(name, O_CREAT, S_IRUSR|S_IWUSR, 0); - if (!workerSemaphore) { + bool success = false; + srand(time(NULL)); + for (int i = 0; i < 10; i++) { + sprintf(name, "ispc_task.%d.%d", (int)getpid(), (int)rand()); + workerSemaphore = sem_open(name, O_CREAT, S_IRUSR|S_IWUSR, 0); + if (workerSemaphore != SEM_FAILED) { + success = true; + break; + } + fprintf(stderr, "Failed to create %s\n", name); + } + + if (!success) { fprintf(stderr, "Error creating semaphore (%s): %s\n", name, strerror(errno)); exit(1); }