You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by bm...@apache.org on 2014/08/13 23:57:07 UTC

git commit: Fixed a resource leak in ThreadLocal.

Repository: mesos
Updated Branches:
  refs/heads/master 5a4094b36 -> e469815db


Fixed a resource leak in ThreadLocal.

Review: https://reviews.apache.org/r/24669


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/e469815d
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/e469815d
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/e469815d

Branch: refs/heads/master
Commit: e469815dbe27b401865ffa6c2cc3d41ff3941ada
Parents: 5a4094b
Author: Benjamin Mahler <bm...@twitter.com>
Authored: Wed Aug 13 14:36:26 2014 -0700
Committer: Benjamin Mahler <bm...@twitter.com>
Committed: Wed Aug 13 14:56:48 2014 -0700

----------------------------------------------------------------------
 .../3rdparty/stout/include/stout/thread.hpp      | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/e469815d/3rdparty/libprocess/3rdparty/stout/include/stout/thread.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/3rdparty/stout/include/stout/thread.hpp b/3rdparty/libprocess/3rdparty/stout/include/stout/thread.hpp
index a20df86..b1af74f 100644
--- a/3rdparty/libprocess/3rdparty/stout/include/stout/thread.hpp
+++ b/3rdparty/libprocess/3rdparty/stout/include/stout/thread.hpp
@@ -14,6 +14,7 @@
 #ifndef __STOUT_THREAD_HPP__
 #define __STOUT_THREAD_HPP__
 
+#include <errno.h>
 #include <pthread.h>
 #include <stdio.h> // For perror.
 #include <stdlib.h> // For abort.
@@ -23,15 +24,29 @@ struct ThreadLocal
 {
   ThreadLocal()
   {
-    if (pthread_key_create(&key, NULL) != 0) {
+    errno = pthread_key_create(&key, NULL);
+
+    if (errno != 0) {
       perror("Failed to create thread local, pthread_key_create");
       abort();
     }
   }
 
+  ~ThreadLocal()
+  {
+    errno = pthread_key_delete(key);
+
+    if (errno != 0) {
+      perror("Failed to destruct thread local, pthread_key_delete");
+      abort();
+    }
+  }
+
   ThreadLocal<T>& operator = (T* t)
   {
-    if (pthread_setspecific(key, t) != 0) {
+    errno = pthread_setspecific(key, t);
+
+    if (errno != 0) {
       perror("Failed to set thread local, pthread_setspecific");
       abort();
     }