summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrishnan Parthasarathi <kparthas@redhat.com>2013-05-22 00:18:04 +0530
committerVijay Bellur <vbellur@redhat.com>2013-05-23 07:24:42 -0700
commit3d68ed8fbb41be06c222aa7754b36e77edced92a (patch)
treee9f3fbc64ccf8e1934820396f0fc9035e4908cb9
parent418f763303ec4003f4b805867ff306a2e43bca76 (diff)
syncop: synctask shouldn't yawn, it could miss a 'wake'
Backport of http://review.gluster.org/5058 Change-Id: I7731fd33ca0c925cc52f8d105275b44fc625a1e2 BUG: 948686 Signed-off-by: Krishnan Parthasarathi <kparthas@redhat.com> Reviewed-on: http://review.gluster.org/5071 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
-rw-r--r--libglusterfs/src/syncop.c17
-rw-r--r--libglusterfs/src/syncop.h13
2 files changed, 5 insertions, 25 deletions
diff --git a/libglusterfs/src/syncop.c b/libglusterfs/src/syncop.c
index 964e6dd2a95..153e74db0f2 100644
--- a/libglusterfs/src/syncop.c
+++ b/libglusterfs/src/syncop.c
@@ -101,21 +101,6 @@ synctask_yield (struct synctask *task)
void
-synctask_yawn (struct synctask *task)
-{
- struct syncenv *env = NULL;
-
- env = task->env;
-
- pthread_mutex_lock (&env->mutex);
- {
- task->woken = 0;
- }
- pthread_mutex_unlock (&env->mutex);
-}
-
-
-void
synctask_wake (struct synctask *task)
{
struct syncenv *env = NULL;
@@ -533,7 +518,6 @@ __synclock_lock (struct synclock *lock)
/* called within a synctask */
list_add_tail (&task->waitq, &lock->waitq);
pthread_mutex_unlock (&lock->guard);
- synctask_yawn (task);
synctask_yield (task);
/* task is removed from waitq in unlock,
* under lock->guard.*/
@@ -689,7 +673,6 @@ __syncbarrier_wait (struct syncbarrier *barrier, int waitfor)
/* called within a synctask */
list_add_tail (&task->waitq, &barrier->waitq);
pthread_mutex_unlock (&barrier->guard);
- synctask_yawn (task);
synctask_yield (task);
pthread_mutex_lock (&barrier->guard);
} else {
diff --git a/libglusterfs/src/syncop.h b/libglusterfs/src/syncop.h
index d27c19d7011..9344d706788 100644
--- a/libglusterfs/src/syncop.h
+++ b/libglusterfs/src/syncop.h
@@ -148,13 +148,11 @@ struct syncargs {
#define __yawn(args) do { \
args->task = synctask_get (); \
- if (args->task) { \
- synctask_yawn (args->task); \
- } else { \
- pthread_mutex_init (&args->mutex, NULL); \
- pthread_cond_init (&args->cond, NULL); \
- args->done = 0; \
- } \
+ if (args->task) \
+ break; \
+ pthread_mutex_init (&args->mutex, NULL); \
+ pthread_cond_init (&args->cond, NULL); \
+ args->done = 0; \
} while (0)
@@ -226,7 +224,6 @@ void syncenv_scale (struct syncenv *env);
int synctask_new (struct syncenv *, synctask_fn_t, synctask_cbk_t, call_frame_t* frame, void *);
void synctask_wake (struct synctask *task);
void synctask_yield (struct synctask *task);
-void synctask_yawn (struct synctask *task);
void synctask_waitfor (struct synctask *task, int count);
#define synctask_barrier_init(args) syncbarrier_init (&args->barrier)