[Libreoffice-commits] online.git: loolwsd/LOOLSession.cpp loolwsd/LOOLWSD.cpp
Henry Castro
hcastro at collabora.com
Fri Dec 4 13:12:02 PST 2015
loolwsd/LOOLSession.cpp | 2 +-
loolwsd/LOOLWSD.cpp | 21 +++++++++++----------
2 files changed, 12 insertions(+), 11 deletions(-)
New commits:
commit f5292a367e7fca543ec0c6aa9769edc5a8fd6df8
Author: Henry Castro <hcastro at collabora.com>
Date: Fri Dec 4 17:09:28 2015 -0400
loolwsd: rework, remove a jail root child
diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp
index 32c1d3e..0c8d672 100644
--- a/loolwsd/LOOLSession.cpp
+++ b/loolwsd/LOOLSession.cpp
@@ -336,7 +336,7 @@ bool MasterProcessSession::handleInput(const char *buffer, int length)
std::unique_lock<std::mutex> lock(_availableChildSessionMutex);
_availableChildSessions.insert(shared_from_this());
std::cout << Util::logPrefix() << "Inserted " << this << " id=" << childId << " into _availableChildSessions, size=" << _availableChildSessions.size() << std::endl;
- LOOLWSD::_childId = _childId = childId;
+ _childId = childId;
_pidChild = pidChild;
lock.unlock();
_availableChildSessionCV.notify_one();
diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp
index 9512a86..debb680 100644
--- a/loolwsd/LOOLWSD.cpp
+++ b/loolwsd/LOOLWSD.cpp
@@ -923,12 +923,6 @@ void LOOLWSD::componentMain()
{
_namedMutexLOOL.lock();
- // Initialization
- std::unique_lock<std::mutex> rngLock(_rngMutex);
- _rng.seed(Process::id());
- _childId = (((Poco::UInt64)_rng.next()) << 32) | _rng.next() | 1;
- rngLock.unlock();
-
Path jailPath = Path::forDirectory(LOOLWSD::childRoot + Path::separator() + std::to_string(_childId));
File(jailPath).createDirectory();
@@ -1083,6 +1077,10 @@ int LOOLWSD::createComponent()
{
int pid;
+ std::unique_lock<std::mutex> rngLock(_rngMutex);
+ _childId = (((Poco::UInt64)_rng.next()) << 32) | _rng.next() | 1;
+ rngLock.unlock();
+
if ((pid = fork()) == -1)
{
std::cout << "Fork failed." << std::endl;
@@ -1094,7 +1092,7 @@ int LOOLWSD::createComponent()
componentMain();
}
- MasterProcessSession::_childProcesses[pid] = pid;
+ MasterProcessSession::_childProcesses[pid] = _childId;
return Application::EXIT_OK;
}
@@ -1117,6 +1115,7 @@ void LOOLWSD::desktopMain()
setSignals(false);
#endif
+ _rng.seed(Process::id());
startupComponent(_numPreSpawnedChildren);
while (MasterProcessSession::_childProcesses.size() > 0)
@@ -1130,11 +1129,13 @@ void LOOLWSD::desktopMain()
if ((WIFEXITED(status) || WIFSIGNALED(status) || WTERMSIG(status) ) )
{
std::cout << Util::logPrefix() << "One of our known child processes died :" << std::to_string(pid) << std::endl;
- MasterProcessSession::_childProcesses.erase(pid);
-
- File aWorkSpace(LOOLSession::jailDocumentURL + Path::separator() + std::to_string(pid));
+ // remove chroot child
+ File aWorkSpace(LOOLWSD::childRoot + Path::separator() +
+ std::to_string(MasterProcessSession::_childProcesses[pid]));
if (aWorkSpace.exists())
aWorkSpace.remove(true);
+
+ MasterProcessSession::_childProcesses.erase(pid);
}
if ( WCOREDUMP(status) )
More information about the Libreoffice-commits
mailing list