make it possible to close memmapped file before dctor

This commit is contained in:
ohyzha
2024-11-11 18:19:06 +02:00
parent b1bd78292a
commit a133641900
4 changed files with 29 additions and 2 deletions

View File

@@ -18,4 +18,9 @@ namespace OpenVulkano
m_data = m_internal->address;
m_size = (m_data) ? m_internal->size : 0;
}
void MemMappedFile::Close()
{
m_internal->Close();
}
}

View File

@@ -38,5 +38,7 @@ namespace OpenVulkano
[[nodiscard]] size_t Size() const { return m_size; }
[[nodiscard]] void* Data() const { return m_data; }
void Close();
};
}

View File

@@ -90,11 +90,20 @@ namespace OpenVulkano
}
}
MemMappedFileInternal::~MemMappedFileInternal()
void MemMappedFileInternal::Close()
{
UnmapViewOfFile(address);
CloseHandle(fileMappingHandle);
CloseHandle(fileHandle);
closed = true;
}
MemMappedFileInternal::~MemMappedFileInternal()
{
if (!closed)
{
Close();
}
}
#else
MemMappedFileInternal::MemMappedFileInternal(const char* file, MemMappedFile::FileMode fileMode)
@@ -114,10 +123,19 @@ namespace OpenVulkano
size = fileStat.st_size;
}
MemMappedFileInternal::~MemMappedFileInternal()
void MemMappedFileInternal::Close()
{
munmap(address, fileStat.st_size);
close(fileHandle);
closed = true;
}
MemMappedFileInternal::~MemMappedFileInternal()
{
if (!closed)
{
Close();
}
}
#endif

View File

@@ -34,10 +34,12 @@ 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;