This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On 02/01/2013 12:02 AM, Carlos O'Donell wrote:
another thread could be inside malloc and trigger an assertion or debug output, which will block, and deadlock fork() e.g. T1 T2 fork take list_all_lock calls malloc takes arena lock. malloc aborts and tries to do IO. or user define malloc tries to do IO. blocks on list_all_lock. blocks on arena lock
The bug discussed in this old thread is now fixed on master, with commit 29d794863cd6e03115d3670707cc873a9965ba92.
IMO, the deadlock you describe is not relevant because list_all_lock is only taken on fflush (NULL) or if a stdio stream is opened or closed. abort does not flush the streams under list_all_lock (ugh). Opening or closing a stdio stream performs malloc or free, so it will potentially deadlock even without the presence of list_all_lock, just involving the malloc locks. A malloc calling into stdio is just undefined. We get away with it to some extent because we implement both, but an interposed malloc cannot do this.
Florian
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |