DataFacade should only remove shared segments if they're actually different from the last time they were checked.

This commit is contained in:
Daniel Patterson 2016-01-13 17:42:50 -08:00 committed by Patrick Niklaus
parent 7675c730b6
commit cf30628d4e

View File

@ -241,8 +241,13 @@ template <class EdgeDataT> class SharedDataFacade final : public BaseDataFacade<
SharedDataFacade() 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( 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_LAYOUT = LAYOUT_NONE;
CURRENT_DATA = DATA_NONE; CURRENT_DATA = DATA_NONE;
CURRENT_TIMESTAMP = 0; CURRENT_TIMESTAMP = 0;
@ -254,8 +259,7 @@ template <class EdgeDataT> class SharedDataFacade final : public BaseDataFacade<
void CheckAndReloadFacade() void CheckAndReloadFacade()
{ {
if (CURRENT_LAYOUT != data_timestamp_ptr->layout || if (CURRENT_LAYOUT != data_timestamp_ptr->layout ||
CURRENT_DATA != data_timestamp_ptr->data || CURRENT_DATA != data_timestamp_ptr->data)
CURRENT_TIMESTAMP != data_timestamp_ptr->timestamp)
{ {
// release the previous shared memory segments // release the previous shared memory segments
SharedMemory::Remove(CURRENT_LAYOUT); SharedMemory::Remove(CURRENT_LAYOUT);
@ -263,8 +267,12 @@ template <class EdgeDataT> class SharedDataFacade final : public BaseDataFacade<
CURRENT_LAYOUT = data_timestamp_ptr->layout; CURRENT_LAYOUT = data_timestamp_ptr->layout;
CURRENT_DATA = data_timestamp_ptr->data; 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)); m_layout_memory.reset(SharedMemoryFactory::Get(CURRENT_LAYOUT));
data_layout = (SharedDataLayout *)(m_layout_memory->Ptr()); data_layout = (SharedDataLayout *)(m_layout_memory->Ptr());