add dismiss for shm

This commit is contained in:
zhangyi 2019-03-28 13:04:29 +08:00
parent 15a99073e3
commit 2e2cf82d91
3 changed files with 13 additions and 6 deletions

View File

@ -38,6 +38,7 @@ public:
void release(); void release();
void* get() const; void* get() const;
id_t dismiss();
private: private:
class handle_; class handle_;

View File

@ -75,7 +75,7 @@ void * get_mem(id_t id, std::size_t * size) {
ipc::error("fail MapViewOfFile[%d]\n", static_cast<int>(::GetLastError())); ipc::error("fail MapViewOfFile[%d]\n", static_cast<int>(::GetLastError()));
return nullptr; return nullptr;
} }
PMEMORY_BASIC_INFORMATION mem_info; MEMORY_BASIC_INFORMATION mem_info;
if (::VirtualQuery(mem, &mem_info, sizeof(mem_info)) == 0) { if (::VirtualQuery(mem, &mem_info, sizeof(mem_info)) == 0) {
ipc::error("fail VirtualQuery[%d]\n", static_cast<int>(::GetLastError())); ipc::error("fail VirtualQuery[%d]\n", static_cast<int>(::GetLastError()));
return nullptr; return nullptr;

View File

@ -66,11 +66,7 @@ bool handle::acquire(char const * name, std::size_t size, unsigned mode) {
void handle::release() { void handle::release() {
if (!valid()) return; if (!valid()) return;
shm::release(impl(p_)->id_); shm::release(dismiss());
impl(p_)->id_ = nullptr;
impl(p_)->m_ = nullptr;
impl(p_)->s_ = 0;
impl(p_)->n_.clear();
} }
void* handle::get() const { void* handle::get() const {
@ -78,5 +74,15 @@ void* handle::get() const {
return impl(p_)->m_; return impl(p_)->m_;
} }
id_t handle::dismiss() {
if (!valid()) return nullptr;
auto old = impl(p_)->id_;
impl(p_)->id_ = nullptr;
impl(p_)->m_ = nullptr;
impl(p_)->s_ = 0;
impl(p_)->n_.clear();
return old;
}
} // namespace shm } // namespace shm
} // namespace ipc } // namespace ipc