diff --git a/src_main/io/pisharedmemory.cpp b/src_main/io/pisharedmemory.cpp index 1538f401..84d083a0 100644 --- a/src_main/io/pisharedmemory.cpp +++ b/src_main/io/pisharedmemory.cpp @@ -109,15 +109,13 @@ bool PISharedMemory::openDevice() { //piCout << PRIVATE->map << PRIVATE->data; #endif #ifdef LINUX - int m = O_RDWR; - if (!isWriteable()) m = O_RDONLY; PRIVATE->name = ("/pip_shm_" + path()).toByteArray(); PRIVATE->name.push_back(0); - int fd = shm_open((const char *)PRIVATE->name.data(), m, 0777); + int fd = shm_open((const char *)PRIVATE->name.data(), O_RDWR, 0777); //piCoutObj << "try open" << PICoutManipulators::Hex << fd; if (fd < 0) { //piCoutObj << "shm_open error," << errorString(); - fd = shm_open((const char *)PRIVATE->name.data(), m | O_CREAT, 0777); + fd = shm_open((const char *)PRIVATE->name.data(), O_RDWR | O_CREAT, 0777); //piCoutObj << "try create" << PICoutManipulators::Hex << (m | O_CREAT) << fd; if (fd < 0) { //piCoutObj << "shm_open error," << errorString(); @@ -127,11 +125,9 @@ bool PISharedMemory::openDevice() { ftruncate(fd, dsize); //piCoutObj << "created" << fd; } - m = PROT_WRITE; - if (!isWriteable()) m = PROT_READ; - PRIVATE->data = mmap(0, dsize, m, MAP_SHARED, fd, 0); + PRIVATE->data = mmap(0, dsize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); ::close(fd); - if (!PRIVATE->data) { + if (PRIVATE->data == MAP_FAILED) { piCoutObj << "mmap error," << errorString(); return false; }