diff options
| author | Rich Felker <dalias@aerifal.cx> | 2013-07-20 13:19:14 -0400 | 
|---|---|---|
| committer | Rich Felker <dalias@aerifal.cx> | 2013-07-20 13:19:14 -0400 | 
| commit | ce8a99578254242a89adbde1cbbf0f34daeec79b (patch) | |
| tree | e6277c4c6af2216d7376af0d8016a430f3b8b44d | |
| parent | 1d92cddb1e1ed4b6cc0e55461727561e7a2522e0 (diff) | |
| download | musl-ce8a99578254242a89adbde1cbbf0f34daeec79b.tar.gz | |
fix shm_open wrongly being cancellable
| -rw-r--r-- | src/mman/shm_open.c | 7 | 
1 files changed, 6 insertions, 1 deletions
| diff --git a/src/mman/shm_open.c b/src/mman/shm_open.c index b23eac7f..d042a5a8 100644 --- a/src/mman/shm_open.c +++ b/src/mman/shm_open.c @@ -4,6 +4,7 @@  #include <unistd.h>  #include <string.h>  #include <limits.h> +#include <pthread.h>  char *__strchrnul(const char *, int); @@ -27,9 +28,13 @@ char *__shm_mapname(const char *name, char *buf)  int shm_open(const char *name, int flag, mode_t mode)  { +	int cs;  	char buf[NAME_MAX+10];  	if (!(name = __shm_mapname(name, buf))) return -1; -	return open(name, flag|O_NOFOLLOW|O_CLOEXEC|O_NONBLOCK, mode); +	pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs); +	int fd = open(name, flag|O_NOFOLLOW|O_CLOEXEC|O_NONBLOCK, mode); +	pthread_setcancelstate(cs, 0); +	return fd;  }  int shm_unlink(const char *name) | 
