Programming Forums

Programming Forums (http://www.programmingforums.org/forumindex.php)
-   C (http://www.programmingforums.org/forum60.html)
-   -   pthread_cond_wait if cancelled leaves mutex locked deadlocking other threads?! (http://www.programmingforums.org/showthread.php?t=15805)

mynickmynick May 8th, 2008 9:03 AM

pthread_cond_wait if cancelled leaves mutex locked deadlocking other threads?!
 
From the following source code
:

int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
{
volatile pthread_descr self = thread_self();

__pthread_lock(&cond->__c_lock, self);
enqueue(&cond->__c_waiting, self);
__pthread_unlock(&cond->__c_lock);
pthread_mutex_unlock(mutex);
suspend_with_cancellation(self);
pthread_mutex_lock(mutex);
/* This is a cancellation point */
if (THREAD_GETMEM(self, p_canceled)
&& THREAD_GETMEM(self, p_cancelstate) == PTHREAD_CANCEL_ENABLE) {
/* Remove ourselves from the waiting queue if we're still on it */
__pthread_lock(&cond->__c_lock, self);
remove_from_queue(&cond->__c_waiting, self);
__pthread_unlock(&cond->__c_lock);
pthread_exit(PTHREAD_CANCELED);
}
return 0;
}


it seems that when a thread gets canceled while waiting for cond it performs
pthread_mutex_lock(mutex);
...
pthread_exit(PTHREAD_CANCELED);

and leaves mutex locked?!
so anothe thread is potentially deadlocked?!
I tried to look in the source for pthread_exit() if and when the mutex is released but I didn't figure out!

BstrucT May 8th, 2008 9:22 AM

Re: pthread_cond_wait if cancelled leaves mutex locked deadlocking other threads?!
 
You might want to check out how to post code properly before you get flamed.

>BstrucT

mynickmynick May 8th, 2008 9:59 AM

Re: pthread_cond_wait if cancelled leaves mutex locked deadlocking other threads?!
 
So may be to prevent this the correct usage is

:

  pthread_mutex_lock(mutex);
  pthread_cleanup_push(pthread_mutex_unlock,mutex);
  while (...) pthread_cond_wait(cond,mutex);
......
  pthread_cleanup_pop();
  pthread_mutex_unlock(mutex);


what you think?

BstrucT Aug 18th, 2008 2:31 AM

Re: pthread_cond_wait if cancelled leaves mutex locked deadlocking other threads?!
 
Noted your comment to thread as unpleasant.

I apologize for the rude reply I have made to your thread, that was dumb. But it is important to note how to format code properly, as I have been tapped accross the fingers for the same mistake, a few times. I wasn't trying to be rude, just trying to give you a heads up man. My apologies if it went down wrong.


All times are GMT -5. The time now is 4:23 AM.

Powered by vBulletin® Version 3.7.0, Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Copyright ©2007 DaniWeb® LLC