X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fmman%2Fshm_open.c;h=d042a5a882bd347dd937bceb8f851bb98cb418b8;hb=3b26a32df42092af6d0cdac655e52635b91d36b2;hp=a9be899b2b5e9718b936e792dc37fdc662ca9d7c;hpb=6e2372a86c7e862ed931910f8a5f4b908639d689;p=musl diff --git a/src/mman/shm_open.c b/src/mman/shm_open.c index a9be899b..d042a5a8 100644 --- a/src/mman/shm_open.c +++ b/src/mman/shm_open.c @@ -4,10 +4,11 @@ #include #include #include +#include char *__strchrnul(const char *, int); -static const char *mapname(const char *name, char *buf) +char *__shm_mapname(const char *name, char *buf) { char *p; while (*name == '/') name++; @@ -27,14 +28,18 @@ static const char *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 = mapname(name, buf))) return -1; - return open(name, flag|O_NOFOLLOW|O_CLOEXEC|O_NONBLOCK, mode); + if (!(name = __shm_mapname(name, buf))) return -1; + 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) { char buf[NAME_MAX+10]; - if (!(name = mapname(name, buf))) return -1; + if (!(name = __shm_mapname(name, buf))) return -1; return unlink(name); }