2010-09-10 18 views
1

Mon code est suspendu fwrite avec la pile suivante:Qu'est-ce qui peut provoquer le blocage de fwrite?

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

Cela semble se produire dans solaris.

Seule une chose incorrecte que je peux penser est que mon code peut essayer de faire un fclose parallèle sur le même pointeur FILE qui est utilisé pour faire fwrite. Si un parallèle se produit, cela conduira-t-il à ce genre de pile? Mais, je ne suis pas sûr si l'appel fclose parallèle a vraiment eu lieu ou non?

Quel pourrait être le problème ici?

+0

avez-vous même considéré les réponses que vous avez obtenues à vos deux questions précédentes? –

+0

@Jens, j'ai fait Monsieur. Mais, je n'étais toujours pas très clair, donc je ne pensais pas avoir de mal à poster ça. J'espère que c'est bien. – Jay

+0

si vous n'êtes pas sûr de fclose, vous ne pouvez pas commenter le fclose et voir si cela se produit, alors vous serez sûr si c'est le problème. – aeh

Répondre

2

On dirait que quelque chose a explosé quelque part. Opérations sur FILE * utilise normalement un verrou interne pour être thread-safe. Vous avez probablement fait quelque chose pour invoquer un comportement indéfini quelque part. Par exemple. vous avez corrompu le tas, écrasé quelque chose d'important (comme un FICHIER), ou le FICHIER * a été fermé - dans ce cas, vous ne pouvez pas compter sur quelque chose de sain si vous continuez à l'utiliser.

+0

merci. Alors, voulez-vous dire un fclose sur le FICHIER * et alors un fwrite peut réellement causer cela? – Jay

+0

C'est une cause possible, oui. – nos