implements #947, free osrm-datastore's shared memory
This commit is contained in:
		
							parent
							
								
									38ebdbb563
								
							
						
					
					
						commit
						3d691a3aec
					
				@ -43,12 +43,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
// generate boost::program_options object for the routing part
 | 
			
		||||
inline bool GenerateDataStoreOptions(const int argc, const char *argv[], ServerPaths &paths)
 | 
			
		||||
inline bool GenerateDataStoreOptions(const int argc, const char *argv[], ServerPaths &paths, bool & springclean)
 | 
			
		||||
{
 | 
			
		||||
    // declare a group of options that will be allowed only on command line
 | 
			
		||||
    boost::program_options::options_description generic_options("Options");
 | 
			
		||||
    generic_options.add_options()("version,v", "Show version")("help,h", "Show this help message")(
 | 
			
		||||
        "config,c",
 | 
			
		||||
    generic_options.add_options()("version,v", "Show version")("help,h", "Show this help message")
 | 
			
		||||
        ("springclean,s", "Remove all regions in shared memory")("config,c",
 | 
			
		||||
        boost::program_options::value<boost::filesystem::path>(&paths["config"])
 | 
			
		||||
            ->default_value("server.ini"),
 | 
			
		||||
        "Path to a configuration file");
 | 
			
		||||
@ -122,6 +122,11 @@ inline bool GenerateDataStoreOptions(const int argc, const char *argv[], ServerP
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (option_variables.count("springclean"))
 | 
			
		||||
    {
 | 
			
		||||
        springclean = true;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    boost::program_options::notify(option_variables);
 | 
			
		||||
 | 
			
		||||
    const bool parameter_present = (paths.find("hsgrdata") != paths.end() &&
 | 
			
		||||
 | 
			
		||||
@ -89,10 +89,53 @@ int main(const int argc, const char *argv[])
 | 
			
		||||
        SimpleLogger().Write(logDEBUG) << "Checking input parameters";
 | 
			
		||||
 | 
			
		||||
        ServerPaths server_paths;
 | 
			
		||||
        if (!GenerateDataStoreOptions(argc, argv, server_paths))
 | 
			
		||||
        bool springclean = false;
 | 
			
		||||
        if (!GenerateDataStoreOptions(argc, argv, server_paths, springclean))
 | 
			
		||||
        {
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (springclean)
 | 
			
		||||
        {
 | 
			
		||||
            SimpleLogger().Write() << "spring-cleaning all shared memory regions";
 | 
			
		||||
            // find all existing shmem regions and remove them.
 | 
			
		||||
            if (SharedMemory::RegionExists(DATA_1))
 | 
			
		||||
            {
 | 
			
		||||
                if (!SharedMemory::Remove(DATA_1))
 | 
			
		||||
                {
 | 
			
		||||
                    SimpleLogger().Write(logWARNING) << "could not delete DATA_1";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (SharedMemory::RegionExists(LAYOUT_1))
 | 
			
		||||
            {
 | 
			
		||||
                if (!SharedMemory::Remove(LAYOUT_1))
 | 
			
		||||
                {
 | 
			
		||||
                    SimpleLogger().Write(logWARNING) << "could not delete LAYOUT_1";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (SharedMemory::RegionExists(DATA_2))
 | 
			
		||||
            {
 | 
			
		||||
                if (!SharedMemory::Remove(DATA_2))
 | 
			
		||||
                {
 | 
			
		||||
                    SimpleLogger().Write(logWARNING) << "could not delete DATA_2";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (SharedMemory::RegionExists(LAYOUT_2))
 | 
			
		||||
            {
 | 
			
		||||
                if (!SharedMemory::Remove(LAYOUT_2))
 | 
			
		||||
                {
 | 
			
		||||
                    SimpleLogger().Write(logWARNING) << "could not delete LAYOUT_2";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (SharedMemory::RegionExists(CURRENT_REGIONS))
 | 
			
		||||
            {
 | 
			
		||||
                if (!SharedMemory::Remove(CURRENT_REGIONS))
 | 
			
		||||
                {
 | 
			
		||||
                    SimpleLogger().Write(logWARNING) << "could not delete CURRENT_REGIONS";
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (server_paths.find("hsgrdata") == server_paths.end())
 | 
			
		||||
        {
 | 
			
		||||
            throw OSRMException("no hsgr file found");
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user