You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by nn...@apache.org on 2014/10/11 00:04:30 UTC

git commit: Added libprocess finalization.

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 <jo...@gmail.com>
Authored: Fri Oct 10 14:43:36 2014 -0700
Committer: Niklas Q. Nielsen <ni...@mesosphere.io>
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;
 }