From cf30628d4e486d2aac50c89de21f4eddca39482b Mon Sep 17 00:00:00 2001 From: Daniel Patterson Date: Wed, 13 Jan 2016 17:42:50 -0800 Subject: [PATCH] DataFacade should only remove shared segments if they're actually different from the last time they were checked. --- server/data_structures/shared_datafacade.hpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/server/data_structures/shared_datafacade.hpp b/server/data_structures/shared_datafacade.hpp index 024a8948f..1c71d043f 100644 --- a/server/data_structures/shared_datafacade.hpp +++ b/server/data_structures/shared_datafacade.hpp @@ -241,8 +241,13 @@ template class SharedDataFacade final : public BaseDataFacade< SharedDataFacade() { + if (!SharedMemory::RegionExists(CURRENT_REGIONS)) + { + throw osrm::exception("No shared memory blocks found, have you forgotten to run osrm-datastore?"); + } data_timestamp_ptr = (SharedDataTimestamp *)SharedMemoryFactory::Get( - CURRENT_REGIONS, sizeof(SharedDataTimestamp), false, false)->Ptr(); + CURRENT_REGIONS, sizeof(SharedDataTimestamp), false, false) + ->Ptr(); CURRENT_LAYOUT = LAYOUT_NONE; CURRENT_DATA = DATA_NONE; CURRENT_TIMESTAMP = 0; @@ -254,8 +259,7 @@ template class SharedDataFacade final : public BaseDataFacade< void CheckAndReloadFacade() { if (CURRENT_LAYOUT != data_timestamp_ptr->layout || - CURRENT_DATA != data_timestamp_ptr->data || - CURRENT_TIMESTAMP != data_timestamp_ptr->timestamp) + CURRENT_DATA != data_timestamp_ptr->data) { // release the previous shared memory segments SharedMemory::Remove(CURRENT_LAYOUT); @@ -263,8 +267,12 @@ template class SharedDataFacade final : public BaseDataFacade< CURRENT_LAYOUT = data_timestamp_ptr->layout; CURRENT_DATA = data_timestamp_ptr->data; - CURRENT_TIMESTAMP = data_timestamp_ptr->timestamp; + CURRENT_TIMESTAMP = 0; // Force trigger a reload + } + if (CURRENT_TIMESTAMP != data_timestamp_ptr->timestamp) + { + CURRENT_TIMESTAMP = data_timestamp_ptr->timestamp; m_layout_memory.reset(SharedMemoryFactory::Get(CURRENT_LAYOUT)); data_layout = (SharedDataLayout *)(m_layout_memory->Ptr());