DataFacade should only remove shared segments if they're actually different from the last time they were checked.
This commit is contained in:
parent
e20f92bbbb
commit
1ed7bcfb2c
@ -225,6 +225,10 @@ template <class EdgeDataT> class SharedDataFacade final : public BaseDataFacade<
|
|||||||
|
|
||||||
SharedDataFacade()
|
SharedDataFacade()
|
||||||
{
|
{
|
||||||
|
if (!datastore::SharedMemory::RegionExists(CURRENT_REGIONS))
|
||||||
|
{
|
||||||
|
throw util::exception("No shared memory blocks found, have you forgotten to run osrm-datastore?");
|
||||||
|
}
|
||||||
data_timestamp_ptr = (SharedDataTimestamp *)datastore::SharedMemoryFactory::Get(
|
data_timestamp_ptr = (SharedDataTimestamp *)datastore::SharedMemoryFactory::Get(
|
||||||
CURRENT_REGIONS, sizeof(SharedDataTimestamp), false, false)
|
CURRENT_REGIONS, sizeof(SharedDataTimestamp), false, false)
|
||||||
->Ptr();
|
->Ptr();
|
||||||
@ -239,8 +243,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
|
||||||
datastore::SharedMemory::Remove(CURRENT_LAYOUT);
|
datastore::SharedMemory::Remove(CURRENT_LAYOUT);
|
||||||
@ -248,8 +251,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(datastore::SharedMemoryFactory::Get(CURRENT_LAYOUT));
|
m_layout_memory.reset(datastore::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