]> OCCT Git - occt.git/commitdiff
Fixed parallel execution problem CR0-SNVK-8_0_0_rc2
authordpasukhi <dpasukhi@opencascade.com>
Fri, 3 May 2024 10:07:32 +0000 (11:07 +0100)
committerdpasukhi <dpasukhi@opencascade.com>
Thu, 31 Jul 2025 08:57:35 +0000 (09:57 +0100)
src/DataExchange/TKXSBase/LibCtl/LibCtl_Library.gxx

index d7fcef9f2bc00ed6a2729ecebc144ff1f8489289..3d4a948059aefc6606d57612c949d9dd09e8fdad 100644 (file)
@@ -15,6 +15,8 @@
 //#include <LibCtl_Library.ixx>
 #include <Standard_NoSuchObject.hxx>
 
+#include <Standard_Mutex.hxx>
+
 
 //  Liste Globale des Modules, dans laquelle on va se servir
 
@@ -25,6 +27,8 @@ static Handle(LibCtl_GlobalNode) theglobal;
 static Handle(TheProtocol) theprotocol;
 static Handle(LibCtl_Node) thelast;
 
+static Standard_Mutex THE_LIBRARY_MUTEX;
+
 
 //  Alimentation de la liste globale
 //  ATTENTION : SetGlobal fait de la substitution, c-a-d que c est le dernier
@@ -32,6 +36,7 @@ static Handle(LibCtl_Node) thelast;
     void LibCtl_Library::SetGlobal
   (const Handle(TheModule)& amodule, const Handle(TheProtocol)& aprotocol)
 {
+  Standard_Mutex::Sentry aLocker (THE_LIBRARY_MUTEX);
   if (theglobal.IsNull()) theglobal = new LibCtl_GlobalNode;
   theglobal->Add(amodule,aprotocol);
 }
@@ -39,6 +44,7 @@ static Handle(LibCtl_Node) thelast;
 // Constructeur d apres Protocole
     LibCtl_Library::LibCtl_Library (const Handle(TheProtocol)& aprotocol)
 {
+  Standard_Mutex::Sentry aLocker (THE_LIBRARY_MUTEX);
   Standard_Boolean last = Standard_False;
   if (aprotocol.IsNull()) return;    // PAS de protocole = Lib VIDE
   if (!theprotocol.IsNull()) last =
@@ -66,7 +72,7 @@ static Handle(LibCtl_Node) thelast;
 //  librairies, doit toujours renvoyer le type le plus haut
   Handle(TheProtocol) aproto = Handle(TheProtocol)::DownCast(aprotocol);
   if (aproto.IsNull()) return;
-
+  Standard_Mutex::Sentry aLocker (THE_LIBRARY_MUTEX);
 //  D abord, ajouter celui-ci a la liste : chercher le Node
   Handle(LibCtl_GlobalNode) curr;
   for (curr = theglobal; !curr.IsNull(); ) {        // curr->Next : plus loin
@@ -86,7 +92,7 @@ static Handle(LibCtl_Node) thelast;
   for (Standard_Integer i = 1; i <= nb; i ++) {
     AddProtocol (aproto->Resource(i));
   }
-//  Ne pas oublier de desoptimiser
+  //  Ne pas oublier de desoptimiser
   theprotocol.Nullify();
   thelast.Nullify();
 }
@@ -96,6 +102,7 @@ static Handle(LibCtl_Node) thelast;
 
     void LibCtl_Library::SetComplete ()
 {
+  Standard_Mutex::Sentry aLocker (THE_LIBRARY_MUTEX);
   thelist = new LibCtl_Node;
 //    On prend chacun des Protocoles de la Liste Globale et on l ajoute
   Handle(LibCtl_GlobalNode) curr;
@@ -116,6 +123,7 @@ static Handle(LibCtl_Node) thelast;
    Handle(TheModule)& module, Standard_Integer& CN) const
 {
   module.Nullify();  CN = 0;    // Reponse "pas trouve"
+  Standard_Mutex::Sentry aLocker (THE_LIBRARY_MUTEX);
   if (thelist.IsNull()) return Standard_False;
   Handle(LibCtl_Node) curr = thelist;
   for (curr = thelist; !curr.IsNull(); ) {        // curr->Next : plus loin