2010-09-10 118 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