You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2015/06/14 11:46:26 UTC
[08/21] mesos git commit: Update libprocess Gate to use synchronized.
Update libprocess Gate to use synchronized.
Review: https://reviews.apache.org/r/35094
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/eb33a57f
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/eb33a57f
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/eb33a57f
Branch: refs/heads/master
Commit: eb33a57ff32297d885d444336da86762dc98d793
Parents: 149f42f
Author: Joris Van Remoortere <jo...@gmail.com>
Authored: Sat Jun 13 06:51:59 2015 -0700
Committer: Benjamin Hindman <be...@gmail.com>
Committed: Sun Jun 14 02:43:00 2015 -0700
----------------------------------------------------------------------
3rdparty/libprocess/src/gate.hpp | 38 ++++++++++++++---------------------
1 file changed, 15 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/eb33a57f/3rdparty/libprocess/src/gate.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/gate.hpp b/3rdparty/libprocess/src/gate.hpp
index 69c906b..e5c9379 100644
--- a/3rdparty/libprocess/src/gate.hpp
+++ b/3rdparty/libprocess/src/gate.hpp
@@ -3,6 +3,8 @@
// TODO(benh): Build implementation directly on-top-of futex's for Linux.
+#include <stout/synchronized.hpp>
+
class Gate
{
public:
@@ -31,21 +33,21 @@ public:
// all (if 'all' is true) of the threads waiting on it.
void open(bool all = true)
{
- pthread_mutex_lock(&mutex);
- {
+ synchronized (mutex) {
state++;
- if (all) pthread_cond_broadcast(&cond);
- else pthread_cond_signal(&cond);
+ if (all) {
+ pthread_cond_broadcast(&cond);
+ } else {
+ pthread_cond_signal(&cond);
+ }
}
- pthread_mutex_unlock(&mutex);
}
// Blocks the current thread until the gate's state changes from
// the current state.
void wait()
{
- pthread_mutex_lock(&mutex);
- {
+ synchronized (mutex) {
waiters++;
state_t old = state;
while (old == state) {
@@ -53,7 +55,6 @@ public:
}
waiters--;
}
- pthread_mutex_unlock(&mutex);
}
// Gets the current state of the gate and notifies the gate about
@@ -61,14 +62,10 @@ public:
// Call 'leave()' if no longer interested in the state change.
state_t approach()
{
- state_t old;
- pthread_mutex_lock(&mutex);
- {
+ synchronized (mutex) {
waiters++;
- old = state;
+ return state;
}
- pthread_mutex_unlock(&mutex);
- return old;
}
// Blocks the current thread until the gate's state changes from
@@ -76,25 +73,22 @@ public:
// calling 'approach()'.
void arrive(state_t old)
{
- pthread_mutex_lock(&mutex);
- {
+ synchronized (mutex) {
while (old == state) {
pthread_cond_wait(&cond, &mutex);
}
+
waiters--;
}
- pthread_mutex_unlock(&mutex);
}
// Notifies the gate that a waiter (the current thread) is no
// longer waiting for the gate's state change.
void leave()
{
- pthread_mutex_lock(&mutex);
- {
+ synchronized (mutex) {
waiters--;
}
- pthread_mutex_unlock(&mutex);
}
// Returns true if there is no one waiting on the gate's state
@@ -102,11 +96,9 @@ public:
bool empty()
{
bool occupied = true;
- pthread_mutex_lock(&mutex);
- {
+ synchronized (mutex) {
occupied = waiters > 0 ? true : false;
}
- pthread_mutex_unlock(&mutex);
return !occupied;
}
};