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()
{
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 EdgeDataT> 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 EdgeDataT> 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());