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 <fstream> | ||||||
| #include <string> | #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[]) | int main(const int argc, const char *argv[]) | ||||||
| { | { | ||||||
|     LogPolicy::GetInstance().Unmute(); |     LogPolicy::GetInstance().Unmute(); | ||||||
| @ -96,36 +133,14 @@ int main(const int argc, const char *argv[]) | |||||||
|         SimpleLogger().Write(logDEBUG) << "Checking input parameters"; |         SimpleLogger().Write(logDEBUG) << "Checking input parameters"; | ||||||
| 
 | 
 | ||||||
|         ServerPaths server_paths; |         ServerPaths server_paths; | ||||||
|         bool springclean = false; |         bool should_springclean = false; | ||||||
|         if (!GenerateDataStoreOptions(argc, argv, server_paths, springclean)) |         if (!GenerateDataStoreOptions(argc, argv, server_paths, should_springclean)) | ||||||
|         { |         { | ||||||
|             return 0; |             return 0; | ||||||
|         } |         } | ||||||
|         if (springclean) |         if (should_springclean) | ||||||
|         { |         { | ||||||
|             SimpleLogger().Write() << "spring-cleaning all shared memory regions"; |             springclean(); | ||||||
|             // 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"; |  | ||||||
|             } |  | ||||||
|             return 0; |             return 0; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| @ -193,27 +208,27 @@ int main(const int argc, const char *argv[]) | |||||||
|         BOOST_ASSERT(!paths_iterator->second.empty()); |         BOOST_ASSERT(!paths_iterator->second.empty()); | ||||||
|         const boost::filesystem::path &geometries_data_path = paths_iterator->second; |         const boost::filesystem::path &geometries_data_path = paths_iterator->second; | ||||||
| 
 | 
 | ||||||
|         // get the shared memory segment to use
 |         // determine segment to use
 | ||||||
|         bool use_first_segment = SharedMemory::RegionExists(LAYOUT_2); |         bool segment2_in_use = SharedMemory::RegionExists(LAYOUT_2); | ||||||
|         const SharedDataType LAYOUT = [&] |         const SharedDataType layout_region = [&] | ||||||
|         { |         { | ||||||
|             if (use_first_segment) |             return segment2_in_use ? LAYOUT_1 : LAYOUT_2; | ||||||
|             { |  | ||||||
|                 return LAYOUT_1; |  | ||||||
|             } |  | ||||||
|             return LAYOUT_2; |  | ||||||
|         }(); |         }(); | ||||||
|         const SharedDataType DATA = [&] |         const SharedDataType data_region = [&] | ||||||
|         { |         { | ||||||
|             if (use_first_segment) |             return segment2_in_use ? DATA_1 : DATA_2; | ||||||
|             { |         }(); | ||||||
|                 return DATA_1; |         const SharedDataType previous_layout_region = [&] | ||||||
|             } |         { | ||||||
|             return DATA_2; |             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
 |         // 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()); |         SharedDataLayout *shared_layout_ptr = static_cast<SharedDataLayout *>(layout_memory->Ptr()); | ||||||
|         shared_layout_ptr = new (layout_memory->Ptr()) SharedDataLayout(); |         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 " |         SimpleLogger().Write() << "allocating shared memory of " | ||||||
|                                << shared_layout_ptr->GetSizeOfLayout() << " bytes"; |                                << shared_layout_ptr->GetSizeOfLayout() << " bytes"; | ||||||
|         SharedMemory *shared_memory = |         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()); |         char *shared_memory_ptr = static_cast<char *>(shared_memory->Ptr()); | ||||||
| 
 | 
 | ||||||
|         // read actual data into shared memory object //
 |         // 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); |             barrier.no_running_queries_condition.wait(query_lock); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         data_timestamp_ptr->layout = LAYOUT; |         data_timestamp_ptr->layout = layout_region; | ||||||
|         data_timestamp_ptr->data = DATA; |         data_timestamp_ptr->data = data_region; | ||||||
|         data_timestamp_ptr->timestamp += 1; |         data_timestamp_ptr->timestamp += 1; | ||||||
|         if (use_first_segment) |         delete_region(previous_data_region); | ||||||
|         { |         delete_region(previous_layout_region); | ||||||
|             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"; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         SimpleLogger().Write() << "all data loaded"; |         SimpleLogger().Write() << "all data loaded"; | ||||||
| 
 | 
 | ||||||
|         shared_layout_ptr->PrintInformation(); |         shared_layout_ptr->PrintInformation(); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user