add attach/detach for shm

This commit is contained in:
zhangyi 2019-03-28 16:30:26 +08:00
parent 755bea8112
commit 89c4b1ce2a
3 changed files with 3 additions and 9 deletions

View File

@ -134,9 +134,8 @@ void release(id_t id) {
auto ii = static_cast<id_info_t*>(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());
}

View File

@ -94,14 +94,12 @@ void release(id_t id) {
auto ii = static_cast<id_info_t*>(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<LPCVOID>(ii->mem_));
if (ii->h_ == NULL) {
ipc::error("fail release: invalid id (h = null)\n");
return;
}
::UnmapViewOfFile(static_cast<LPCVOID>(ii->mem_));
::CloseHandle(ii->h_);
else ::CloseHandle(ii->h_);
mem::free(ii);
}

View File

@ -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;