make it possible to close memmapped file before dctor
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,5 +38,7 @@ namespace OpenVulkano
|
||||
[[nodiscard]] size_t Size() const { return m_size; }
|
||||
|
||||
[[nodiscard]] void* Data() const { return m_data; }
|
||||
|
||||
void Close();
|
||||
};
|
||||
}
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user