get rid of internal Close() method

This commit is contained in:
ohyzha
2024-11-13 10:24:34 +02:00
parent d88addd858
commit 656615e5a7
3 changed files with 10 additions and 24 deletions

View File

@@ -21,8 +21,14 @@ namespace OpenVulkano
void MemMappedFile::Close() void MemMappedFile::Close()
{ {
m_internal->Close(); if (m_internal.use_count() == 1)
m_internal = nullptr; {
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_data = nullptr;
m_size = 0; m_size = 0;
} }

View File

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

View File

@@ -34,12 +34,10 @@ namespace OpenVulkano
#else #else
[[nodiscard]] bool InvalidHandle() const { return fileHandle == -1; } [[nodiscard]] bool InvalidHandle() const { return fileHandle == -1; }
#endif #endif
void Close();
private: private:
void* address = nullptr; void* address = nullptr;
size_t size = 0; size_t size = 0;
bool closed = false;
#ifdef _MSC_VER #ifdef _MSC_VER
HANDLE fileHandle; HANDLE fileHandle;