diff --git a/openVulkanoCpp/IO/MemMappedFile.cpp b/openVulkanoCpp/IO/MemMappedFile.cpp index ffa7e4f..56a453d 100644 --- a/openVulkanoCpp/IO/MemMappedFile.cpp +++ b/openVulkanoCpp/IO/MemMappedFile.cpp @@ -21,8 +21,14 @@ namespace OpenVulkano void MemMappedFile::Close() { - m_internal->Close(); - m_internal = nullptr; + if (m_internal.use_count() == 1) + { + m_internal = nullptr; + } + else + { + Logger::APP->warn("Can't close memory mapped file since it's being shared among {} instances", m_internal.use_count()); + } m_data = nullptr; m_size = 0; } diff --git a/openVulkanoCpp/IO/MemMappedFileInternal.cpp b/openVulkanoCpp/IO/MemMappedFileInternal.cpp index de69c97..460552e 100644 --- a/openVulkanoCpp/IO/MemMappedFileInternal.cpp +++ b/openVulkanoCpp/IO/MemMappedFileInternal.cpp @@ -90,20 +90,11 @@ namespace OpenVulkano } } - void MemMappedFileInternal::Close() + MemMappedFileInternal::~MemMappedFileInternal() { UnmapViewOfFile(address); CloseHandle(fileMappingHandle); CloseHandle(fileHandle); - closed = true; - } - - MemMappedFileInternal::~MemMappedFileInternal() - { - if (!closed) - { - Close(); - } } #else MemMappedFileInternal::MemMappedFileInternal(const char* file, MemMappedFile::FileMode fileMode) @@ -123,19 +114,10 @@ namespace OpenVulkano size = fileStat.st_size; } - void MemMappedFileInternal::Close() + MemMappedFileInternal::~MemMappedFileInternal() { munmap(address, fileStat.st_size); close(fileHandle); - closed = true; - } - - MemMappedFileInternal::~MemMappedFileInternal() - { - if (!closed) - { - Close(); - } } #endif diff --git a/openVulkanoCpp/IO/MemMappedFileInternal.hpp b/openVulkanoCpp/IO/MemMappedFileInternal.hpp index a4320fa..2d7852b 100644 --- a/openVulkanoCpp/IO/MemMappedFileInternal.hpp +++ b/openVulkanoCpp/IO/MemMappedFileInternal.hpp @@ -34,12 +34,10 @@ namespace OpenVulkano #else [[nodiscard]] bool InvalidHandle() const { return fileHandle == -1; } #endif - void Close(); private: void* address = nullptr; size_t size = 0; - bool closed = false; #ifdef _MSC_VER HANDLE fileHandle;