Что может привести к зависанию fwrite? - PullRequest
1 голос
/ 10 сентября 2010

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

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

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

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

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

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

1 Ответ

2 голосов
/ 10 сентября 2010

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

...