Only lock the virtual address space when shared memory was requested
In addition, some improvements: - unlock only when locking succeeded - scoped exception safe RAII locker Reference: - https://github.com/Project-OSRM/osrm-backend/issues/1698#issuecomment-144003177
This commit is contained in:
parent
74ac283c52
commit
e75be68466
21
routed.cpp
21
routed.cpp
@ -91,11 +91,23 @@ int main(int argc, const char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
const int lock_flags = MCL_CURRENT | MCL_FUTURE;
|
struct MemoryLocker final
|
||||||
if (-1 == mlockall(lock_flags))
|
|
||||||
{
|
{
|
||||||
SimpleLogger().Write(logWARNING) << argv[0] << " could not be locked to RAM";
|
explicit MemoryLocker(bool shouldLock_) : shouldLock(shouldLock_)
|
||||||
|
{
|
||||||
|
if (-1 == mlockall(MCL_CURRENT | MCL_FUTURE))
|
||||||
|
{
|
||||||
|
couldLock = false;
|
||||||
|
SimpleLogger().Write(logWARNING) << "memory could not be locked to RAM";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
~MemoryLocker()
|
||||||
|
{
|
||||||
|
if (couldLock)
|
||||||
|
(void)munlockall();
|
||||||
|
}
|
||||||
|
bool shouldLock = false, couldLock = false;
|
||||||
|
} memoryLocker(lib_config.use_shared_memory);
|
||||||
#endif
|
#endif
|
||||||
SimpleLogger().Write() << "starting up engines, " << OSRM_VERSION;
|
SimpleLogger().Write() << "starting up engines, " << OSRM_VERSION;
|
||||||
|
|
||||||
@ -177,9 +189,6 @@ int main(int argc, const char *argv[])
|
|||||||
SimpleLogger().Write(logWARNING) << "exception: " << e.what();
|
SimpleLogger().Write(logWARNING) << "exception: " << e.what();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#ifdef __linux__
|
|
||||||
munlockall();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user