Re: gwlib List Locking issue
"Alexander Malysh" <[email protected]>
| Newsgroups | gmane.comp.mobile.kannel.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi Andreas, I think it's bug. gwlist_sort should use lock(list)/unlock(list). Am 24.11.2006, 15:21 Uhr, schrieb Andreas Fink <[email protected]>: > Hi folks, > > I was optimizing my code which uses gwlib and have hit a big problem > when I was converting things like > > > mutex_lock(my_list_mutex); > do_someting_with(my_list); > mutex_unlock(my_list_mutex); > > > to: > > gwlist_lock(my_list); > do_someting_with(my_list); > gwlist_unlock(my_list); > > to get rid of an additional mutex we dont really need as we have a > built in one in List. > > > While doing that I was hitting a deadlock issue. > It turned out that in my do_something part I called gwlist_sort and > that looks like this: > > void gwlist_sort(List *list, int(*cmp)(const void *, const void *)) > { > gw_assert(list != NULL && cmp != NULL); > > gwlist_lock(list); > if (list->len == 0) { > /* nothing to sort */ > gwlist_unlock(list); > return; > } > qsort(&GET(list, 0), list->len, sizeof(void*), cmp); > gwlist_unlock(list); > } > > > In my eyes, this function should call lock()/unlock(). not gwlist_lock > ()/gwlist_unlock(); > > It is the only place where gwlist_lock is used in list.c. > > Is this simply a bug I have spotted or was there anywhere a specific > reason why a sort uses the permanent lock instead of the > single_operation_lock? > > > > > > > > Andreas Fink > Fink Consulting GmbH > --------------------------------------------------------------- > Tel: +41-61-6666332 Fax: +41-61-6666331 Mobile: +41-79-2457333 > Address: Clarastrasse 3, 4058 Basel, Switzerland > E-Mail: [email protected] > Homepage: http://www.finkconsulting.com > --------------------------------------------------------------- > ICQ: 8239353 > MSN: [email protected] AIM: smsrelay Skype: andreasfink > Yahoo: finkconsulting SMS: +41792457333 > > > -- Thanks, Alex