From: Martin Mares Date: Sat, 19 Jul 2008 21:54:06 +0000 (+0200) Subject: Libucw: Use the new temp file logic for semaphores. X-Git-Tag: holmes-import~382 X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=7ac12546e977cc7b951879529f082ec946619abf;p=libucw.git Libucw: Use the new temp file logic for semaphores. (picked from Michal's dev-vorner branch) --- diff --git a/ucw/semaphore.h b/ucw/semaphore.h index fa2e0ee4..140ba9b9 100644 --- a/ucw/semaphore.h +++ b/ucw/semaphore.h @@ -16,6 +16,9 @@ #include #include +#include + +#include "ucw/fastbuf.h" // For the temp_file_name /* In Darwin, sem_init() is unfortunately not implemented and the guide * recommends emulating it using sem_open(). */ @@ -23,10 +26,14 @@ static inline sem_t * sem_alloc(void) { - static uns cnt = 0; - char buf[20]; - sprintf(buf, "tmp/sem-%d-%d", getpid(), cnt++); - sem_t *sem = sem_open(buf, O_CREAT, 0777, 0); + char buf[TEMP_FILE_NAME_LEN]; + int mode, retry = 10; + do + { + temp_file_name(buf, &mode); + sem_t *sem = sem_open(buf, mode | O_CREAT, 0777, 0); + } + while (sem == (sem_t*) SEM_FAILED && errno == EEXIST && retry --); ASSERT(sem != (sem_t*) SEM_FAILED); return sem; }