From dbd70d4884916009fa89e7423c71ca2c226c51f1 Mon Sep 17 00:00:00 2001 From: Patrick Niklaus Date: Fri, 13 Jan 2017 15:56:36 +0000 Subject: [PATCH] Throw exception with more helpful error message when shmctl fails --- include/storage/shared_memory.hpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/include/storage/shared_memory.hpp b/include/storage/shared_memory.hpp index 0190b0207..d199f40b5 100644 --- a/include/storage/shared_memory.hpp +++ b/include/storage/shared_memory.hpp @@ -111,10 +111,35 @@ class SharedMemory { auto shmid = shm.get_shmid(); ::shmid_ds xsi_ds; + const auto errorToMessage = [](int error) -> std::string { + switch (error) + { + case EPERM: + return "EPERM"; + break; + case EACCES: + return "ACCESS"; + break; + case EINVAL: + return "EINVAL"; + break; + case EFAULT: + return "EFAULT"; + break; + default: + return "Unknown Error " + std::to_string(error); + break; + } + }; + do { int ret = ::shmctl(shmid, IPC_STAT, &xsi_ds); - (void)ret; // no unused warning + if (ret < 0) + { + throw util::exception("shmctl encountered an error: " + errorToMessage(ret) + + SOURCE_REF); + } BOOST_ASSERT(ret >= 0); std::this_thread::sleep_for(std::chrono::microseconds(100));