Bonjour à tous !

J'ai un problème avec une gestion d'accès concurrent à un XmlWriter. J'ai essayé tout ce qu'on peut faire en gestion de concurrence (lock, mutex,...) et mon XmlWriter se ferme (à cause d'accès simultanés, a priori).

J'ai une appli qui doit logger pas mal de de chose en xml, dans un même fichier. Ces écritures sont appelées lors d'événements, donc dans des threads, et sur la même instance d'XmlWriter. J'ai une classe de log de ce type (avec des lock):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
class Log
{
XmlWriter xw;
Object myLock = new Object();
 
// constructeur (initialise l'XmlWriter, ouvre un fichier et écrit le noeud racine)
// ...
 
public EcrireA(...)
{
lock (myLock)
{
.....
xw.write......
.....
}
}
 
public EcrireA(...)
{
lock (myLock)
{
.....
xw.write......
.....
}
}
 
// EcrireC, D, ...
 
// appelé en dehors de toutes concurrences
public FermerLog()
{
_xw.flush();
_xw.close();
}
Ensuite, j'ai donc plusieurs threads/événements, qui utilisent EcrireA, B, ou autre. Et il arrive un moment, lorsqu'il y a une certaine fréquence d'accès, l'XmlWriter plante et ferme le flux (faisant crasher le thread concerné, sans exception).

Je suspecte essentiellement un problème de concurrence, étant donné que mes méthodes sont testées et valides.
J'ai essayé avec des moniteurs (via lock), des mutex (WaitOne,...) et l'attribut [Synchronization].

Voilà, je fais donc appels à la communauté pour m'orienter vers quelque chose de plus robuste ou pointer du doigt une malveillance de ma part.

Merci d'avance.


EDIT : après débuggage intensif, il s'avérait que c'était une autre partie du code, non testée, qui, par effet de bords, faisait bugger mes méthodes...