From 734dc46d54c44a987cab30e45476b5532b057fdf Mon Sep 17 00:00:00 2001 From: greg7mdp Date: Tue, 7 Nov 2023 08:46:47 -0500 Subject: [PATCH] Check for `mmap` failing (could happen if RAM size < database_size). --- src/pinnable_mapped_file.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pinnable_mapped_file.cpp b/src/pinnable_mapped_file.cpp index 2aba10d..e3b0ad0 100644 --- a/src/pinnable_mapped_file.cpp +++ b/src/pinnable_mapped_file.cpp @@ -233,6 +233,8 @@ void pinnable_mapped_file::setup_copy_on_write_mapping() { pmm->save_database_file(true, false); _cow_address = mmap(NULL, _database_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, _file_mapping.get_mapping_handle().handle, 0); + if (_cow_address == MAP_FAILED) + BOOST_THROW_EXCEPTION(std::runtime_error(std::string("Failed to map database ") + _database_name + ": " + strerror(errno))); *((char*)_cow_address + header_dirty_bit_offset) = dirty; // set dirty bit in our memory mapping _segment_manager = reinterpret_cast((char*)_cow_address + header_size);