DataFacade should only remove shared segments if they're actually different from the last time they were checked.
This commit is contained in:
parent
7675c730b6
commit
cf30628d4e
@ -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());
|
||||||
|
Loading…
Reference in New Issue
Block a user