Repository: mesos Updated Branches: refs/heads/master 2d78336ea -> 29a82c97c
Added libprocess finalization. Introduced a finalize() function to match the initialize() function in process.hpp. Use this at the unit test runner for libprocess to start getting more valuable valgrind feedback. Added cleanup of remaining Processes in ~ProcessManager() as a start. Review: https://reviews.apache.org/r/26533 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/29a82c97 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/29a82c97 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/29a82c97 Branch: refs/heads/master Commit: 29a82c97c74ff72c2542bf554066ac76daa02664 Parents: 2d78336 Author: Joris Van Remoortere <[email protected]> Authored: Fri Oct 10 14:43:36 2014 -0700 Committer: Niklas Q. Nielsen <[email protected]> Committed: Fri Oct 10 14:43:36 2014 -0700 ---------------------------------------------------------------------- 3rdparty/libprocess/include/process/process.hpp | 6 +++++ 3rdparty/libprocess/src/process.cpp | 23 +++++++++++++++++++- 3rdparty/libprocess/src/tests/main.cpp | 5 ++++- 3 files changed, 32 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/29a82c97/3rdparty/libprocess/include/process/process.hpp ---------------------------------------------------------------------- diff --git a/3rdparty/libprocess/include/process/process.hpp b/3rdparty/libprocess/include/process/process.hpp index 270ca28..81a1f7a 100644 --- a/3rdparty/libprocess/include/process/process.hpp +++ b/3rdparty/libprocess/include/process/process.hpp @@ -270,6 +270,12 @@ void initialize(const std::string& delegate = ""); /** + * Clean up the library. + */ +void finalize(); + + +/** * Returns the IP address associated with this instance of the * library. */ http://git-wip-us.apache.org/repos/asf/mesos/blob/29a82c97/3rdparty/libprocess/src/process.cpp ---------------------------------------------------------------------- diff --git a/3rdparty/libprocess/src/process.cpp b/3rdparty/libprocess/src/process.cpp index d30ed63..85fb995 100644 --- a/3rdparty/libprocess/src/process.cpp +++ b/3rdparty/libprocess/src/process.cpp @@ -1673,6 +1673,12 @@ void initialize(const string& delegate) } +void finalize() +{ + delete process_manager; +} + + uint32_t ip() { process::initialize(); @@ -2435,7 +2441,22 @@ ProcessManager::ProcessManager(const string& _delegate) } -ProcessManager::~ProcessManager() {} +ProcessManager::~ProcessManager() +{ + ProcessBase* process = NULL; + // Pop a process off the top and terminate it. Don't hold the lock + // or process the whole map as terminating one process might + // trigger other terminations. Deal with them one at a time. + do { + synchronized (processes) { + process = !processes.empty() ? processes.begin()->second : NULL; + } + if (process != NULL) { + process::terminate(process); + process::wait(process); + } + } while (process != NULL); +} ProcessReference ProcessManager::use(const UPID& pid) http://git-wip-us.apache.org/repos/asf/mesos/blob/29a82c97/3rdparty/libprocess/src/tests/main.cpp ---------------------------------------------------------------------- diff --git a/3rdparty/libprocess/src/tests/main.cpp b/3rdparty/libprocess/src/tests/main.cpp index 0a3ba4e..63f31f5 100644 --- a/3rdparty/libprocess/src/tests/main.cpp +++ b/3rdparty/libprocess/src/tests/main.cpp @@ -35,5 +35,8 @@ int main(int argc, char** argv) listeners.Append(process::ClockTestEventListener::instance()); listeners.Append(process::FilterTestEventListener::instance()); - return RUN_ALL_TESTS(); + int result = RUN_ALL_TESTS(); + + process::finalize(); + return result; }
