Re: Race condition in list_consume()

Alexander Malysh <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <[email protected]>
Hi Andreas,

I don't see any problem in gwlist/log. pthread_cond_wait releases the mutex
passed to it. Seems you have race on some other place. 

Andreas Fink wrote:

> We found a severe bug in gwlib.
> 
> We have the following scenario:
> 
> A  calls debug("xxx",0,"xxxx") which does :
> 
>                  gwlist_add_producer(writers);
> 
> and continues but doesnt reach yet this line:
> 
>                  gwlist_remove_producer(writers);
> 
> 
> at this point the list "writers" is empty but has writers-
>  >num_producers=1
> 
> B does:
> lock(list); /* atomic lock */
> 
>          list->single_operation_lock->owner = -1;
>          pthread_cond_wait(&list->nonempty, &list-
>  >single_operation_lock->mutex);
> 
> so it waits until A is calling gwlist_remove_producer()
> 
> and wait until A completes.
> 
> 
> Now A is calling this:
> 
> void gwlist_remove_producer(List *list)
> {
>      lock(list);
>      gw_assert(list->num_producers > 0);
>      --list->num_producers;
>      pthread_cond_broadcast(&list->nonempty);
>      unlock(list);
> }
> 
> and gets locked up because the list's atomic lock is locked by B.
> 
> 
> C now has a new debug message and gets stopped at  gwlist_produce().
> 
> 
> In other words, every process who wants to write to debug log gets
> stuck.
> 
> Now there is different solutions to this.
> Our approach would be to do in gwlist_consume() to do this:
> 
> 
> unlock(list);
>          pthread_cond_wait(&list->nonempty, &list-
>  >single_operation_lock->mutex);
>          lock(list);
> 
> 
> Any other ideas?
> maybe no atomic lock around gwlist_remove_producer() ?
> 
> 
> Andreas Fink
> 
> Fink Consulting GmbH
> Global Networks Schweiz AG
> BebbiCell AG
> 
> ---------------------------------------------------------------
> Tel: +41-61-6666330 Fax: +41-61-6666331  Mobile: +41-79-2457333
> Address: Clarastrasse 3, 4058 Basel, Switzerland
> E-Mail:  [email protected]
> www.finkconsulting.com www.global-networks.ch www.bebbicell.ch
> ---------------------------------------------------------------
> ICQ: 8239353 MSN: [email protected] AIM: smsrelay Skype: andreasfink
> Yahoo: finkconsulting SMS: +41792457333

-- 
Thanks,
Alex
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.