[Sheepdog] [PATCH] sheep: remove the unnecessary mutex operations

MORITA Kazutaka morita.kazutaka at lab.ntt.co.jp
Tue Jan 10 09:28:52 CET 2012


At Tue, 10 Jan 2012 16:01:17 +0800,
Liu Yuan wrote:
> 
> On 01/10/2012 03:52 PM, MORITA Kazutaka wrote:
> 
> > At Sat,  7 Jan 2012 14:29:02 +0800,
> > Liu Yuan wrote:
> >>
> >> From: Liu Yuan <tailai.ly at taobao.com>
> >>
> >> We do nothing while we hold the mutex, then we don't need it.
> >>
> >> Signed-off-by: Liu Yuan <tailai.ly at taobao.com>
> >> ---
> >>  sheep/work.c |    4 ----
> >>  1 files changed, 0 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/sheep/work.c b/sheep/work.c
> >> index 789272e..de3f500 100644
> >> --- a/sheep/work.c
> >> +++ b/sheep/work.c
> >> @@ -194,10 +194,6 @@ static void *worker_routine(void *arg)
> >>  	struct work *work;
> >>  	eventfd_t value = 1;
> >>  
> >> -	pthread_mutex_lock(&wi->startup_lock);
> >> -	/* started this thread */
> >> -	pthread_mutex_unlock(&wi->startup_lock);
> >> -
> > 
> > This lock is used to ensure that all worker threads are correctly
> > started up.
> > 
> 
> 
> Why we need mutex here to ensure correct start-up? We get the lock, do
> nothing and then unlock, looks a null operation to me.

If we don't wait start-up here and pthread_create fails in
init_work_queue(), a deadlock could happen.  It is because
init_work_queue() waits for the already running threads with
pthread_join() but the threads would suspend with pthread_cond_wait().

If we can cleanly exit init_work_queue() in error cases, I think it is
okay to remove the startup lock.

Thanks,

Kazutaka



More information about the sheepdog mailing list