]> SALOME platform Git repositories - modules/kernel.git/commitdiff
Salome HOME
PR: bug KERNEL 5852
authorprascle <prascle>
Fri, 14 May 2004 10:12:09 +0000 (10:12 +0000)
committerprascle <prascle>
Fri, 14 May 2004 10:12:09 +0000 (10:12 +0000)
src/SALOMEGUI/PyInterp_PyQt.cxx
src/SALOMEGUI/PyInterp_base.cxx
src/SALOME_PYQT/SALOME_PYQT_GUI.cxx

index ae688800fa990afdd0974c6ceebbcf5cc1dc951c..dd136e506e506c7f77acc3b2bde9e7bff6ae02af 100644 (file)
@@ -20,7 +20,7 @@ using namespace std;
  * calls initialize method defined in base class, which calls virtual methods
  * initstate & initcontext redefined here
  */
-PyInterp_PyQt::PyInterp_PyQt()
+PyInterp_PyQt::PyInterp_PyQt(): PyInterp_base()
 {
   initialize();
 }
index 032be6aeb99d70e73a79add1ad9a706fd1520cea..e16f1e04193f606bc65a82af07ca3e10c481ce29 100644 (file)
@@ -128,23 +128,30 @@ void PyInterp_base::initialize()
   _history.clear();       // start a new list of user's commands 
   _ith = _history.begin();
 
-  PyReleaseLock aReleaseLock;
   if(!_gtstate){
+    PyReleaseLock aReleaseLock;
     Py_Initialize(); // Initialize the interpreter
     PyEval_InitThreads(); // Initialize and acquire the global interpreter lock
     PySys_SetArgv(_argc,_argv); // initialize sys.argv
     _gtstate = PyThreadState_Get();
+    
+    /*
+     * salome_shared_modules should be imported only once
+     */
+    salome_shared_modules_module = PyImport_ImportModule("salome_shared_modules");
+    if(!salome_shared_modules_module)
+      {
+       INFOS("PyInterp_base::initialize() - salome_shared_modules_module == NULL");
+       PyErr_Print();
+       PyErr_Clear();
+      }
   }
+  // Here the global lock is released
   if(MYPYDEBUG) MESSAGE("PyInterp_base::initialize() - this = "<<this<<"; _gtstate = "<<_gtstate);
 
-  salome_shared_modules_module = PyImport_ImportModule("salome_shared_modules");
-  if(!salome_shared_modules_module){
-    INFOS("PyInterp_base::initialize() - salome_shared_modules_module == NULL");
-    PyErr_Print();
-    PyErr_Clear();
-  }
+  // The lock will be acquired in initState. Make provision to release it on exit
+  PyReleaseLock aReleaseLock;
 
-  //PyLockWrapper aLock(_tstate);
   initState();
   initContext();
 
index 76b4cc896cc3f86b2ba0b0e839a008f8700cb63b..73e33fd0527db93bb64f39b54903b7d91e118b43 100644 (file)
@@ -83,13 +83,17 @@ void SALOME_PYQT_GUI::importModule()
 
 void SALOME_PYQT_GUI::initInterp(int StudyID)
 {
-  MESSAGE("initInterp");
+  MESSAGE("SALOME_PYQT_GUI::initInterp");
   if(mapInterp.find(StudyID) != mapInterp.end()){
-    MESSAGE ( " StudyID is found " << StudyID );
+    MESSAGE ( "SALOME_PYQT_GUI::initInterp StudyID is found " << StudyID );
     interp = mapInterp[StudyID];
     return;
   }else{
-    MESSAGE ( " StudyID is not found " << StudyID );
+    MESSAGE ( "SALOME_PYQT_GUI::initInterp StudyID is not found " << StudyID );
+    /*
+     * The creation of Python interpretor must be protected par a C++ Lock because of C threads
+     */
+    ThreadLock aPyLock = GetPyThreadLock("SALOME_PYQT_GUI::initInterp");
     interp=new PyInterp_PyQt();
     mapInterp[StudyID] = interp;
   }
@@ -106,7 +110,7 @@ void SALOME_PYQT_GUI::initInterp(int StudyID)
  */
 //=============================================================================
 SALOME_PYQT_GUI::SALOME_PYQT_GUI( const QString& theName, QObject* theParent ) :
-    SALOMEGUI( theName, theParent )
+    SALOMEGUI( theName, theParent ),_module(0)
 {
     MESSAGE("SALOME_PYQT_GUI::SALOME_PYQT_GUI");
 }
@@ -310,9 +314,9 @@ void SALOME_PYQT_GUI::DefinePopup( QString & theContext,
 
 bool SALOME_PYQT_GUI::ActiveStudyChanged( QAD_Desktop* parent )
 {
-  MESSAGE("SALOME_PYQT_GUI::ActiveStudyChanged");
   
   int StudyID = parent->getActiveApp()->getActiveStudy()->getStudyId();
+  MESSAGE("SALOME_PYQT_GUI::ActiveStudyChanged"<<StudyID<<" - " <<this);
   initInterp(StudyID);
   
   PyLockWrapper aLock = interp->GetLockWrapper();