svn commit: branches/uClibc-nptl/libc/misc/dirent
Carmelo AMOROSO
carmelo.amoroso at st.com
Thu May 15 14:48:36 UTC 2008
Mike Frysinger wrote:
> On Thursday 15 May 2008, Carmelo AMOROSO wrote:
>
>> Mike Frysinger wrote:
>>
>>> On Thursday 15 May 2008, Carmelo AMOROSO wrote:
>>>
>>>> Mike Frysinger wrote:
>>>>
>>>>> On Wednesday 05 December 2007, carmelo at uclibc.org wrote:
>>>>>
>>>>>> Author: carmelo
>>>>>> Date: 2007-12-05 09:25:08 -0800 (Wed, 05 Dec 2007)
>>>>>> New Revision: 20626
>>>>>>
>>>>>> Log:
>>>>>> Fix opendir problem when statically linked due to a missing
>>>>>> initialization of the mutex field within DIR struct.
>>>>>> When linked dynamically instead, __pthread_mutex_init will
>>>>>> initialize the mutex itself. Without this fix, any call to
>>>>>> readdir will stuck forever trying to acquire the mutex.
>>>>>>
>>>>> sorry, but i dont follow. we call __pthread_mutex_init() on the
>>>>> dd_lock member of the dirent structure which should initialize the
>>>>> mutex just fine. you cant assume that zeroing the structure is the same
>>>>> as initializing the mutex. that is why we have these initializer
>>>>> functions in the first place. are you suggesting that the
>>>>> __pthread_mutex_init() function is not doing its job ?
>>>>>
>>>> yes exactly... but only if statically linked. I suspect that in this
>>>> case the __pthread_mutex_init is a nop...
>>>> likely due to weak aliasing... however, glibc does exactly the same call
>>>> to memset
>>>> and it uses
>>>>
>>>> #ifndef NOT_IN_libc
>>>> __libc_lock_init (dirp->lock);
>>>> #endif
>>>>
>>>> instead of __pthread_mutex_init(&(ptr->dd_lock), NULL);
>>>>
>>> can you provide a test case ? i'd like to fix the real problem ...
>>> adding a memset() just ignores the larger issue with every function that
>>> does something similar.
>>>
>> below there is the test used by an our customer that reported the error.
>> You can simplify it as you like.
>>
>
> unfortunately, it isnt hanging for me. but i'm testing Blackfin here. if i
> checkout uClibc trunk at the rev just before your commit and build it for
> sh4, that should be able to reproduce the issue, right ? (i have sh4
> hardware i can test on).
>
It should, even if the problem appeared on nptl port, but, from this
point of view, you know, the code is
the same. Anyway I have now a uclibc-linuxthreads for my sh4 target, I
can check it.
>
>> Anyway, regarding this issue, I was thinking in the past to review the
>> use of pthread dor locking
>> within the libc and use instead something like glibc (libc_lock)... any
>> comments about this ?
>>
>
> i'm not terribly familiar with how glibc does internal locking, but i dont see
> how it'd be any different from the locking we already have with
> uClibc_mutex.h. could you elaborate ?
> -mike
>
I need to review this... it is something I was looking at times ago.
Give me some time.
Carmelo
More information about the uClibc-cvs
mailing list