2010-09-10 120 views
1

我的代碼是掛的fwrite和以下堆棧:什麼會導致fwrite掛起?

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

這似乎在solaris要發生的事情。

只有不正確的東西,我能想到的是,我的代碼可能會嘗試做一個並行的fclose在用於做fwrite的同一個文件指針。如果並行fclose發生,它會導致這種堆棧?

但是,我不確定並行fclose調用是否確實發生或沒有?

這裏有什麼問題?

+0

你甚至考慮過你對前兩個問題的答覆嗎? – 2010-09-10 17:56:03

+0

@Jens,我確實是先生。但是,我還不是很清楚,所以認爲在發佈這件事上沒有任何傷害。希望這很好。 – Jay 2010-09-10 18:12:05

+0

如果你不確定fclose,你不能註釋掉fclose,看看是否會發生這種情況,那麼你會確定這是否是問題所在。 – aeh 2010-09-10 18:44:41

回答

2

看起來有些東西已經炸燬了。 FILE *上的操作通常使用內部鎖來保證線程安全。你可能會做某些事情來調用某些地方的未定義行爲。例如。你損壞了堆,重寫了一些重要的東西(比如FILE),或者FILE *已經關閉 - 在這種情況下,如果你繼續使用它,你不能依賴任何會發生的事情。

+0

謝謝。那麼,你的意思是說在FILE *上寫一個fclose,然後一個fwrite實際上可以導致這種情況? – Jay 2010-09-10 18:12:42

+0

這是一個可能的原因,是的。 – nos 2010-09-10 18:15:32