83 lines
2.3 KiB
C++
83 lines
2.3 KiB
C++
#include <cstdio>
|
|
|
|
#include "storage/shared_memory.hpp"
|
|
#include "storage/shared_datatype.hpp"
|
|
#include "util/simple_logger.hpp"
|
|
|
|
namespace osrm
|
|
{
|
|
namespace tools
|
|
{
|
|
|
|
// FIXME remove after folding back into datastore
|
|
using namespace storage;
|
|
|
|
void deleteRegion(const SharedDataType region)
|
|
{
|
|
if (SharedMemory::RegionExists(region) && !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";
|
|
default: // DATA_NONE:
|
|
return "DATA_NONE";
|
|
}
|
|
}();
|
|
|
|
util::SimpleLogger().Write(logWARNING) << "could not delete shared memory region " << name;
|
|
}
|
|
}
|
|
|
|
// find all existing shmem regions and remove them.
|
|
void springclean()
|
|
{
|
|
util::SimpleLogger().Write() << "spring-cleaning all shared memory regions";
|
|
deleteRegion(DATA_1);
|
|
deleteRegion(LAYOUT_1);
|
|
deleteRegion(DATA_2);
|
|
deleteRegion(LAYOUT_2);
|
|
deleteRegion(CURRENT_REGIONS);
|
|
}
|
|
}
|
|
}
|
|
|
|
int main() try
|
|
{
|
|
osrm::util::LogPolicy::GetInstance().Unmute();
|
|
osrm::util::SimpleLogger().Write() << "Releasing all locks";
|
|
osrm::util::SimpleLogger().Write() << "ATTENTION! BE CAREFUL!";
|
|
osrm::util::SimpleLogger().Write() << "----------------------";
|
|
osrm::util::SimpleLogger().Write() << "This tool may put osrm-routed into an undefined state!";
|
|
osrm::util::SimpleLogger().Write()
|
|
<< "Type 'Y' to acknowledge that you know what your are doing.";
|
|
osrm::util::SimpleLogger().Write() << "\n\nDo you want to purge all shared memory allocated "
|
|
<< "by osrm-datastore? [type 'Y' to confirm]";
|
|
|
|
const auto letter = getchar();
|
|
if (letter != 'Y')
|
|
{
|
|
osrm::util::SimpleLogger().Write() << "aborted.";
|
|
return EXIT_SUCCESS;
|
|
}
|
|
osrm::tools::springclean();
|
|
return EXIT_SUCCESS;
|
|
}
|
|
catch (const std::exception &e)
|
|
{
|
|
osrm::util::SimpleLogger().Write(logWARNING) << "[excpetion] " << e.what();
|
|
return EXIT_FAILURE;
|
|
}
|