projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix arm __tlsdesc_dynamic when built as thumb code without __ARM_ARCH>=5
[musl]
/
src
/
thread
/
sem_open.c
diff --git
a/src/thread/sem_open.c
b/src/thread/sem_open.c
index
66f12ee
..
de8555c
100644
(file)
--- a/
src/thread/sem_open.c
+++ b/
src/thread/sem_open.c
@@
-11,16
+11,14
@@
#include <sys/stat.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <pthread.h>
-#include "libc.h"
-
-char *__shm_mapname(const char *, char *);
+#include "lock.h"
static struct {
ino_t ino;
sem_t *sem;
int refcnt;
} *semtab;
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)
#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);
goto fail;
}
close(fd);
- if (link(tmp, name) == 0) break;
- e = errno;
+ e = link(tmp, name) ? errno : 0;
unlink(tmp);
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. */
/* Failure is only fatal when doing an exclusive open;
* otherwise, next iteration will try to open the
* existing file. */