Что может привести к зависанию fwrite?

Мой код зависает fwrite со следующим стеком:

libc.so.6.1::___lll_lock_wait
libc.so.6.1::fwrite

Кажется, это происходит в солярисе.

Единственная неправильная вещь, о которой я могу думать, это то, что мой код может попытаться выполнить параллельный fclose с тем же указателем FILE, который используется для выполнения fwrite. Если произойдет параллельный fclose, приведет ли он к такому стеку?

Но я не уверен, действительно ли произошел параллельный вызов fclose или нет?

В чем здесь может быть проблема?


person Jay    schedule 10.09.2010    source источник
comment
вы вообще рассмотрели ответы, которые вы получили на два предыдущих вопроса?   -  person Jens Gustedt    schedule 10.09.2010
comment
@ Дженс, я сделал, сэр. Но я все еще не очень ясно выразился, поэтому решил, что не повредит опубликовать это. Надеюсь, это нормально.   -  person Jay    schedule 10.09.2010
comment
если вы не уверены в fclose, не можете ли вы закомментировать fclose и посмотреть, произойдет ли это, тогда вы будете уверены, что проблема в этом.   -  person aeh    schedule 10.09.2010


Ответы (1)


Кажется, где-то что-то взорвалось. Операции с FILE* обычно используют внутреннюю блокировку для обеспечения безопасности потоков. Вы, вероятно, сделали что-то, чтобы где-то вызвать неопределенное поведение. Например. вы повредили кучу, перезаписав что-то важное (например, ФАЙЛ), или ФАЙЛ * был закрыт - в этом случае вы не можете рассчитывать на то, что произойдет что-то разумное, если вы продолжите его использовать.

person nos    schedule 10.09.2010
comment
Благодарю. Итак, вы хотите сказать, что fclose в ФАЙЛЕ *, а затем fwrite действительно может вызвать это? - person Jay; 10.09.2010
comment
Это одна из возможных причин, да. - person nos; 10.09.2010