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