From 89c4b1ce2abae78626ff642f3ae7c8cb1c582e2a Mon Sep 17 00:00:00 2001 From: zhangyi Date: Thu, 28 Mar 2019 16:30:26 +0800 Subject: [PATCH] add attach/detach for shm --- src/platform/shm_linux.cpp | 3 +-- src/platform/shm_win.cpp | 6 ++---- src/shm.cpp | 3 --- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/platform/shm_linux.cpp b/src/platform/shm_linux.cpp index a019eb9..706a37d 100644 --- a/src/platform/shm_linux.cpp +++ b/src/platform/shm_linux.cpp @@ -134,9 +134,8 @@ void release(id_t id) { auto ii = static_cast(id); if (ii->mem_ == nullptr || ii->size_ == 0) { ipc::error("fail release: invalid id (mem = %p, size = %zd)\n", ii->mem_, ii->size_); - return; } - if (acc_of(ii->mem_, ii->size_).fetch_sub(1, std::memory_order_acquire) == 1) { + else if (acc_of(ii->mem_, ii->size_).fetch_sub(1, std::memory_order_acquire) == 1) { ::munmap(ii->mem_, ii->size_); ::shm_unlink(ii->name_.c_str()); } diff --git a/src/platform/shm_win.cpp b/src/platform/shm_win.cpp index afb3bb2..3e1408c 100644 --- a/src/platform/shm_win.cpp +++ b/src/platform/shm_win.cpp @@ -94,14 +94,12 @@ void release(id_t id) { auto ii = static_cast(id); if (ii->mem_ == nullptr || ii->size_ == 0) { ipc::error("fail release: invalid id (mem = %p, size = %zd)\n", ii->mem_, ii->size_); - return; } + else ::UnmapViewOfFile(static_cast(ii->mem_)); if (ii->h_ == NULL) { ipc::error("fail release: invalid id (h = null)\n"); - return; } - ::UnmapViewOfFile(static_cast(ii->mem_)); - ::CloseHandle(ii->h_); + else ::CloseHandle(ii->h_); mem::free(ii); } diff --git a/src/shm.cpp b/src/shm.cpp index 71e3a2a..2b3f8c2 100644 --- a/src/shm.cpp +++ b/src/shm.cpp @@ -65,12 +65,10 @@ bool handle::acquire(char const * name, std::size_t size, unsigned mode) { } void handle::release() { - if (!valid()) return; shm::release(detach()); } void* handle::get() const { - if (!valid()) return nullptr; return impl(p_)->m_; } @@ -82,7 +80,6 @@ void handle::attach(id_t id) { } id_t handle::detach() { - if (!valid()) return nullptr; auto old = impl(p_)->id_; impl(p_)->id_ = nullptr; impl(p_)->m_ = nullptr;