fix shared mem warnings
This commit is contained in:
		
							parent
							
								
									7817384e3c
								
							
						
					
					
						commit
						7eb810c34a
					
				
							
								
								
									
										131
									
								
								datastore.cpp
									
									
									
									
									
								
							
							
						
						
									
										131
									
								
								datastore.cpp
									
									
									
									
									
								
							| @ -60,6 +60,43 @@ typedef StaticGraph<QueryEdge::EdgeData> QueryGraph; | ||||
| #include <fstream> | ||||
| #include <string> | ||||
| 
 | ||||
| // delete a shared memory region. report warning if it could not be deleted
 | ||||
| void delete_region(const SharedDataType region) | ||||
| { | ||||
|     if (SharedMemory::RegionExists(region) ) | ||||
|     { | ||||
|         if( !SharedMemory::Remove(region)) | ||||
|         { | ||||
|             const std::string name = [&] | ||||
|             { | ||||
|                 switch (region) | ||||
|                 { | ||||
|                     case CURRENT_REGIONS:   return "CURRENT_REGIONS"; | ||||
|                     case LAYOUT_1:          return "LAYOUT_1"; | ||||
|                     case DATA_1:            return "DATA_1"; | ||||
|                     case LAYOUT_2:          return "LAYOUT_2"; | ||||
|                     case DATA_2:            return "DATA_2"; | ||||
|                     case LAYOUT_NONE:       return "LAYOUT_NONE"; | ||||
|                     case DATA_NONE:         return "DATA_NONE"; | ||||
|                 } | ||||
|             }(); | ||||
| 
 | ||||
|             SimpleLogger().Write(logWARNING) << "could not delete shared memory region " << name; | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // find all existing shmem regions and remove them.
 | ||||
| void springclean() | ||||
| { | ||||
|     SimpleLogger().Write() << "spring-cleaning all shared memory regions"; | ||||
|     delete_region(DATA_1); | ||||
|     delete_region(LAYOUT_1); | ||||
|     delete_region(DATA_2); | ||||
|     delete_region(LAYOUT_2); | ||||
|     delete_region(CURRENT_REGIONS); | ||||
| } | ||||
| 
 | ||||
| int main(const int argc, const char *argv[]) | ||||
| { | ||||
|     LogPolicy::GetInstance().Unmute(); | ||||
| @ -96,36 +133,14 @@ int main(const int argc, const char *argv[]) | ||||
|         SimpleLogger().Write(logDEBUG) << "Checking input parameters"; | ||||
| 
 | ||||
|         ServerPaths server_paths; | ||||
|         bool springclean = false; | ||||
|         if (!GenerateDataStoreOptions(argc, argv, server_paths, springclean)) | ||||
|         bool should_springclean = false; | ||||
|         if (!GenerateDataStoreOptions(argc, argv, server_paths, should_springclean)) | ||||
|         { | ||||
|             return 0; | ||||
|         } | ||||
|         if (springclean) | ||||
|         if (should_springclean) | ||||
|         { | ||||
|             SimpleLogger().Write() << "spring-cleaning all shared memory regions"; | ||||
|             // find all existing shmem regions and remove them.
 | ||||
|             if (SharedMemory::RegionExists(DATA_1) && !SharedMemory::Remove(DATA_1)) | ||||
|             { | ||||
|                 SimpleLogger().Write(logWARNING) << "could not delete DATA_1"; | ||||
|             } | ||||
|             if (SharedMemory::RegionExists(LAYOUT_1) && !SharedMemory::Remove(LAYOUT_1)) | ||||
|             { | ||||
|                 SimpleLogger().Write(logWARNING) << "could not delete LAYOUT_1"; | ||||
|             } | ||||
|             if (SharedMemory::RegionExists(DATA_2) && !SharedMemory::Remove(DATA_2)) | ||||
|             { | ||||
|                 SimpleLogger().Write(logWARNING) << "could not delete DATA_2"; | ||||
|             } | ||||
|             if (SharedMemory::RegionExists(LAYOUT_2) && !SharedMemory::Remove(LAYOUT_2)) | ||||
|             { | ||||
|                 SimpleLogger().Write(logWARNING) << "could not delete LAYOUT_2"; | ||||
|             } | ||||
|             if (SharedMemory::RegionExists(CURRENT_REGIONS) && | ||||
|                 !SharedMemory::Remove(CURRENT_REGIONS)) | ||||
|             { | ||||
|                 SimpleLogger().Write(logWARNING) << "could not delete CURRENT_REGIONS"; | ||||
|             } | ||||
|             springclean(); | ||||
|             return 0; | ||||
|         } | ||||
| 
 | ||||
| @ -193,27 +208,27 @@ int main(const int argc, const char *argv[]) | ||||
|         BOOST_ASSERT(!paths_iterator->second.empty()); | ||||
|         const boost::filesystem::path &geometries_data_path = paths_iterator->second; | ||||
| 
 | ||||
|         // get the shared memory segment to use
 | ||||
|         bool use_first_segment = SharedMemory::RegionExists(LAYOUT_2); | ||||
|         const SharedDataType LAYOUT = [&] | ||||
|         // determine segment to use
 | ||||
|         bool segment2_in_use = SharedMemory::RegionExists(LAYOUT_2); | ||||
|         const SharedDataType layout_region = [&] | ||||
|         { | ||||
|             if (use_first_segment) | ||||
|             { | ||||
|                 return LAYOUT_1; | ||||
|             } | ||||
|             return LAYOUT_2; | ||||
|             return segment2_in_use ? LAYOUT_1 : LAYOUT_2; | ||||
|         }(); | ||||
|         const SharedDataType DATA = [&] | ||||
|         const SharedDataType data_region = [&] | ||||
|         { | ||||
|             if (use_first_segment) | ||||
|             { | ||||
|                 return DATA_1; | ||||
|             } | ||||
|             return DATA_2; | ||||
|             return segment2_in_use ? DATA_1 : DATA_2; | ||||
|         }(); | ||||
|         const SharedDataType previous_layout_region = [&] | ||||
|         { | ||||
|             return segment2_in_use ? LAYOUT_2 : LAYOUT_1; | ||||
|         }(); | ||||
|         const SharedDataType previous_data_region = [&] | ||||
|         { | ||||
|             return segment2_in_use ? DATA_2 : DATA_1; | ||||
|         }(); | ||||
| 
 | ||||
|         // Allocate a memory layout in shared memory, deallocate previous
 | ||||
|         SharedMemory *layout_memory = SharedMemoryFactory::Get(LAYOUT, sizeof(SharedDataLayout)); | ||||
|         SharedMemory *layout_memory = SharedMemoryFactory::Get(layout_region, sizeof(SharedDataLayout)); | ||||
|         SharedDataLayout *shared_layout_ptr = static_cast<SharedDataLayout *>(layout_memory->Ptr()); | ||||
|         shared_layout_ptr = new (layout_memory->Ptr()) SharedDataLayout(); | ||||
| 
 | ||||
| @ -344,7 +359,7 @@ int main(const int argc, const char *argv[]) | ||||
|         SimpleLogger().Write() << "allocating shared memory of " | ||||
|                                << shared_layout_ptr->GetSizeOfLayout() << " bytes"; | ||||
|         SharedMemory *shared_memory = | ||||
|             SharedMemoryFactory::Get(DATA, shared_layout_ptr->GetSizeOfLayout()); | ||||
|             SharedMemoryFactory::Get(data_region, shared_layout_ptr->GetSizeOfLayout()); | ||||
|         char *shared_memory_ptr = static_cast<char *>(shared_memory->Ptr()); | ||||
| 
 | ||||
|         // read actual data into shared memory object //
 | ||||
| @ -533,35 +548,11 @@ int main(const int argc, const char *argv[]) | ||||
|             barrier.no_running_queries_condition.wait(query_lock); | ||||
|         } | ||||
| 
 | ||||
|         data_timestamp_ptr->layout = LAYOUT; | ||||
|         data_timestamp_ptr->data = DATA; | ||||
|         data_timestamp_ptr->layout = layout_region; | ||||
|         data_timestamp_ptr->data = data_region; | ||||
|         data_timestamp_ptr->timestamp += 1; | ||||
|         if (use_first_segment) | ||||
|         { | ||||
|             BOOST_ASSERT(DATA == DATA_1); | ||||
|             BOOST_ASSERT(LAYOUT == LAYOUT_1); | ||||
|             if (!SharedMemory::Remove(DATA_2)) | ||||
|             { | ||||
|                 SimpleLogger().Write(logWARNING) << "could not delete DATA_2"; | ||||
|             } | ||||
|             if (!SharedMemory::Remove(LAYOUT_2)) | ||||
|             { | ||||
|                 SimpleLogger().Write(logWARNING) << "could not delete LAYOUT_2"; | ||||
|             } | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             BOOST_ASSERT(DATA == DATA_2); | ||||
|             BOOST_ASSERT(LAYOUT == LAYOUT_2); | ||||
|             if (!SharedMemory::Remove(DATA_1)) | ||||
|             { | ||||
|                 SimpleLogger().Write(logWARNING) << "could not delete DATA_1"; | ||||
|             } | ||||
|             if (!SharedMemory::Remove(LAYOUT_1)) | ||||
|             { | ||||
|                 SimpleLogger().Write(logWARNING) << "could not delete LAYOUT_1"; | ||||
|             } | ||||
|         } | ||||
|         delete_region(previous_data_region); | ||||
|         delete_region(previous_layout_region); | ||||
|         SimpleLogger().Write() << "all data loaded"; | ||||
| 
 | ||||
|         shared_layout_ptr->PrintInformation(); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user