From 20f5557cc1455ddf4324b9b79dbb9b0848f8e33a Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Wed, 2 Sep 2020 14:00:30 +0200 Subject: [PATCH] Add proper cleanup --- core-buffer/include/RamBufferWriter.hpp | 2 ++ core-buffer/src/RamBufferWriter.cpp | 15 ++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/core-buffer/include/RamBufferWriter.hpp b/core-buffer/include/RamBufferWriter.hpp index 4f689f3..64b6df9 100644 --- a/core-buffer/include/RamBufferWriter.hpp +++ b/core-buffer/include/RamBufferWriter.hpp @@ -8,6 +8,8 @@ class RamBufferWriter { const std::string detector_name_; int shm_fd_; + size_t buffer_size_; + void* buffer_; public: RamBufferWriter(const std::string& detector_name, diff --git a/core-buffer/src/RamBufferWriter.cpp b/core-buffer/src/RamBufferWriter.cpp index 49d11cf..0aaa818 100644 --- a/core-buffer/src/RamBufferWriter.cpp +++ b/core-buffer/src/RamBufferWriter.cpp @@ -25,19 +25,24 @@ RamBufferWriter::RamBufferWriter( } size_t slot_size = MODULE_N_BYTES + sizeof(ModuleFrame); - size_t buffer_size = slot_size * n_modules * n_slots; + buffer_size_ = slot_size * n_modules * n_slots; - if ((ftruncate(shm_fd_, buffer_size)) == -1) { + if ((ftruncate(shm_fd_, buffer_size_)) == -1) { throw runtime_error(strerror(errno)); } - void* buffer = mmap(NULL, buffer_size, PROT_WRITE, MAP_SHARED, shm_fd_, 0); - if (buffer == (void*)-1) { + // TODO: Test with MAP_HUGETLB + void* ptr = mmap(NULL, buffer_size_, PROT_WRITE, MAP_SHARED, shm_fd_, 0); + if (ptr == MAP_FAILED) { throw runtime_error(strerror(errno)); } + + buffer_ = ptr; } RamBufferWriter::~RamBufferWriter() { - shm_unlink(detector_name_.c_str()); + munmap(buffer_, buffer_size_); + shm_unlink(detector_name_.c_str()); + close(shm_fd_); }