diff options
author | Krishnan Parthasarathi <kparthas@redhat.com> | 2013-05-22 00:18:04 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2013-05-23 07:24:42 -0700 |
commit | 3d68ed8fbb41be06c222aa7754b36e77edced92a (patch) | |
tree | e9f3fbc64ccf8e1934820396f0fc9035e4908cb9 /libglusterfs | |
parent | 418f763303ec4003f4b805867ff306a2e43bca76 (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>
Diffstat (limited to 'libglusterfs')
-rw-r--r-- | libglusterfs/src/syncop.c | 17 | ||||
-rw-r--r-- | libglusterfs/src/syncop.h | 13 |
2 files changed, 5 insertions, 25 deletions
diff --git a/libglusterfs/src/syncop.c b/libglusterfs/src/syncop.c index 964e6dd2a..153e74db0 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 d27c19d70..9344d7067 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) |