X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fthread%2Fsem_open.c;h=de8555c5a6869ceda20c956cc6c8d1ea8470a138;hb=1ef37aa00ea830dfda76e04e3d941cafa74d8b76;hp=66f12ee42000450e5b26ef56b51f11b61ad835ab;hpb=a033cd22aa0ecd9f494b74669d358e7e1c7e1335;p=musl diff --git a/src/thread/sem_open.c b/src/thread/sem_open.c index 66f12ee4..de8555c5 100644 --- a/src/thread/sem_open.c +++ b/src/thread/sem_open.c @@ -11,16 +11,14 @@ #include #include #include -#include "libc.h" - -char *__shm_mapname(const char *, char *); +#include "lock.h" static struct { ino_t ino; sem_t *sem; int refcnt; } *semtab; -static int lock[2]; +static volatile int lock[1]; #define FLAGS (O_RDWR|O_NOFOLLOW|O_CLOEXEC|O_NONBLOCK) @@ -123,9 +121,10 @@ sem_t *sem_open(const char *name, int flags, ...) goto fail; } close(fd); - if (link(tmp, name) == 0) break; - e = errno; + e = link(tmp, name) ? errno : 0; unlink(tmp); + if (!e) break; + munmap(map, sizeof(sem_t)); /* Failure is only fatal when doing an exclusive open; * otherwise, next iteration will try to open the * existing file. */