mirror of
https://github.com/mutouyun/cpp-ipc.git
synced 2025-12-07 01:06:45 +08:00
add attach/detach for shm
This commit is contained in:
parent
755bea8112
commit
89c4b1ce2a
@ -134,9 +134,8 @@ void release(id_t id) {
|
|||||||
auto ii = static_cast<id_info_t*>(id);
|
auto ii = static_cast<id_info_t*>(id);
|
||||||
if (ii->mem_ == nullptr || ii->size_ == 0) {
|
if (ii->mem_ == nullptr || ii->size_ == 0) {
|
||||||
ipc::error("fail release: invalid id (mem = %p, size = %zd)\n", ii->mem_, ii->size_);
|
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_);
|
::munmap(ii->mem_, ii->size_);
|
||||||
::shm_unlink(ii->name_.c_str());
|
::shm_unlink(ii->name_.c_str());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -94,14 +94,12 @@ void release(id_t id) {
|
|||||||
auto ii = static_cast<id_info_t*>(id);
|
auto ii = static_cast<id_info_t*>(id);
|
||||||
if (ii->mem_ == nullptr || ii->size_ == 0) {
|
if (ii->mem_ == nullptr || ii->size_ == 0) {
|
||||||
ipc::error("fail release: invalid id (mem = %p, size = %zd)\n", ii->mem_, ii->size_);
|
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) {
|
if (ii->h_ == NULL) {
|
||||||
ipc::error("fail release: invalid id (h = null)\n");
|
ipc::error("fail release: invalid id (h = null)\n");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
::UnmapViewOfFile(static_cast<LPCVOID>(ii->mem_));
|
else ::CloseHandle(ii->h_);
|
||||||
::CloseHandle(ii->h_);
|
|
||||||
mem::free(ii);
|
mem::free(ii);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -65,12 +65,10 @@ bool handle::acquire(char const * name, std::size_t size, unsigned mode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void handle::release() {
|
void handle::release() {
|
||||||
if (!valid()) return;
|
|
||||||
shm::release(detach());
|
shm::release(detach());
|
||||||
}
|
}
|
||||||
|
|
||||||
void* handle::get() const {
|
void* handle::get() const {
|
||||||
if (!valid()) return nullptr;
|
|
||||||
return impl(p_)->m_;
|
return impl(p_)->m_;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +80,6 @@ void handle::attach(id_t id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
id_t handle::detach() {
|
id_t handle::detach() {
|
||||||
if (!valid()) return nullptr;
|
|
||||||
auto old = impl(p_)->id_;
|
auto old = impl(p_)->id_;
|
||||||
impl(p_)->id_ = nullptr;
|
impl(p_)->id_ = nullptr;
|
||||||
impl(p_)->m_ = nullptr;
|
impl(p_)->m_ = nullptr;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user