
Wilbur Lang wrote:
Hi,
Oh.....my dirty solution is wrong too....
The solution might be this: m_base = mmap ( (void*)address , static_cast<std::size_t>(m_extra_offset + m_size) , prot , flags , mapping.get_mapping_handle() , offset - m_extra_offset); //Check if mapping was successful if(m_base == MAP_FAILED){ error_info err = system_error_code(); this->priv_close(); throw interprocess_exception(err); } //Calculate new base for the user void *old_base = m_base; m_base = static_cast<char*>(m_base) + m_extra_offset; m_offset = offset; m_size = size; //Check for fixed mapping error if(address && (old_base != (void*)address)){ error_info err = system_error_code(); this->priv_close(); throw interprocess_exception(err); } The mapping address is cached and tested when the object is in a stable state, so that priv_close() can properly clean all the resources. Regards, Ion