diff --git a/src/libipc/platform/posix/shm_posix.cpp b/src/libipc/platform/posix/shm_posix.cpp index 621b2f4..968a202 100644 --- a/src/libipc/platform/posix/shm_posix.cpp +++ b/src/libipc/platform/posix/shm_posix.cpp @@ -72,7 +72,10 @@ id_t acquire(char const * name, std::size_t size, unsigned mode) { S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if (fd == -1) { - ipc::error("fail shm_open[%d]: %s\n", errno, op_name.c_str()); + // only open shm not log error when file not exist + if (open != mode || ENOENT != errno) { + ipc::error("fail shm_open[%d]: %s\n", errno, op_name.c_str()); + } return nullptr; } ::fchmod(fd, S_IRUSR | S_IWUSR | diff --git a/src/libipc/shm.cpp b/src/libipc/shm.cpp index 32b761e..a6a00c7 100755 --- a/src/libipc/shm.cpp +++ b/src/libipc/shm.cpp @@ -78,8 +78,12 @@ bool handle::acquire(char const * name, std::size_t size, unsigned mode) { return false; } release(); + const auto id = shm::acquire(name, size, mode); + if (!id) { + return false; + } + impl(p_)->id_ = id; impl(p_)->n_ = name; - impl(p_)->id_ = shm::acquire(name, size, mode); impl(p_)->m_ = shm::get_mem(impl(p_)->id_, &(impl(p_)->s_)); return valid(); }