summaryrefslogtreecommitdiff
path: root/AK/MappedFile.cpp
diff options
context:
space:
mode:
authorSergey Bugaev <bugaevc@gmail.com>2019-08-05 15:26:56 +0300
committerAndreas Kling <awesomekling@gmail.com>2019-08-05 16:04:31 +0200
commit55d7810fab79efbc9fad62566fe1f12be80856e8 (patch)
treef7d4bcb3eb36611702727e9c1dab1c73387260e6 /AK/MappedFile.cpp
parent837b4762839861ff5968c326d9661ce4f132becb (diff)
downloadserenity-55d7810fab79efbc9fad62566fe1f12be80856e8.zip
AK: Do not keep an open FD in MmappedFile
We only need an open FD while establishing the mapping, and can close it immediately after mmap() call.
Diffstat (limited to 'AK/MappedFile.cpp')
-rw-r--r--AK/MappedFile.cpp32
1 files changed, 15 insertions, 17 deletions
diff --git a/AK/MappedFile.cpp b/AK/MappedFile.cpp
index 83baecfaa4..73265c5a7f 100644
--- a/AK/MappedFile.cpp
+++ b/AK/MappedFile.cpp
@@ -13,21 +13,26 @@ namespace AK {
MappedFile::MappedFile(const StringView& file_name)
{
m_size = PAGE_SIZE;
- m_fd = open_with_path_length(file_name.characters_without_null_termination(), file_name.length(), O_RDONLY | O_CLOEXEC, 0);
+ int fd = open_with_path_length(file_name.characters_without_null_termination(), file_name.length(), O_RDONLY | O_CLOEXEC, 0);
- if (m_fd != -1) {
- struct stat st;
- fstat(m_fd, &st);
- m_size = st.st_size;
- m_map = mmap(nullptr, m_size, PROT_READ, MAP_SHARED, m_fd, 0);
-
- if (m_map == MAP_FAILED)
- perror("");
+ if (fd == -1) {
+ perror("open");
+ return;
}
+ struct stat st;
+ fstat(fd, &st);
+ m_size = st.st_size;
+ m_map = mmap(nullptr, m_size, PROT_READ, MAP_SHARED, fd, 0);
+
+ if (m_map == MAP_FAILED)
+ perror("mmap");
+
#ifdef DEBUG_MAPPED_FILE
- dbgprintf("MappedFile{%s} := { m_fd=%d, m_size=%u, m_map=%p }\n", file_name.characters(), m_fd, m_size, m_map);
+ dbgprintf("MappedFile{%s} := { fd=%d, m_size=%u, m_map=%p }\n", file_name.characters(), fd, m_size, m_map);
#endif
+
+ close(fd);
}
MappedFile::~MappedFile()
@@ -39,23 +44,17 @@ void MappedFile::unmap()
{
if (!is_valid())
return;
- ASSERT(m_fd != -1);
int rc = munmap(m_map, m_size);
ASSERT(rc == 0);
- rc = close(m_fd);
- ASSERT(rc == 0);
m_size = 0;
- m_fd = -1;
m_map = (void*)-1;
}
MappedFile::MappedFile(MappedFile&& other)
: m_size(other.m_size)
- , m_fd(other.m_fd)
, m_map(other.m_map)
{
other.m_size = 0;
- other.m_fd = -1;
other.m_map = (void*)-1;
}
@@ -65,7 +64,6 @@ MappedFile& MappedFile::operator=(MappedFile&& other)
return *this;
unmap();
swap(m_size, other.m_size);
- swap(m_fd, other.m_fd);
swap(m_map, other.m_map);
return *this;
}