Salome HOME
Now evalyfx can be used safely inside a SALOME module.
authorAnthony Geay <anthony.geay@edf.fr>
Thu, 7 Apr 2016 07:20:27 +0000 (09:20 +0200)
committerAnthony Geay <anthony.geay@edf.fr>
Thu, 7 Apr 2016 07:20:27 +0000 (09:20 +0200)
src/evalyfx/YACSEvalSession.cxx
src/evalyfx/YACSEvalYFXPattern.cxx

index 250202fa4f8635c558ceca03c2e31e73e83ed5e6..f89f076c0351bc2b22dc526227f5ea2a44a10e71 100644 (file)
@@ -49,7 +49,7 @@ YACSEvalSession::~YACSEvalSession()
 {
   delete _internal;
   YACS::ENGINE::AutoGIL gal;
-  if(isLaunched())
+  if(isLaunched() && !isAttached())
     {
       YACS::ENGINE::AutoPyRef terminateSession(PyObject_GetAttrString(_salomeInstance,const_cast<char *>("stop")));//new
       YACS::ENGINE::AutoPyRef res(PyObject_CallObject(terminateSession,0));
@@ -85,6 +85,7 @@ void YACSEvalSession::launchUsingCurrentSession()
     return ;
   YACS::ENGINE::AutoGIL gal;
   _corbaConfigFileName=GetConfigAndPort(_port);
+  _isAttached=true; _isLaunched=true;
 }
 
 void YACSEvalSession::checkLaunched() const
index 3c00612bf3222eacf19f6cd3090d916a2ba013f6..6de18f31fc5dff0696a7cd6131cf0f49dd55b495 100644 (file)
@@ -71,9 +71,10 @@ const char YACSEvalYFXGraphGen::GATHER_NODE_NAME[]="__gather__";
 class MyAutoThreadSaver
 {
 public:
-  MyAutoThreadSaver():_save(PyEval_SaveThread()) { }
-  ~MyAutoThreadSaver() { PyEval_RestoreThread(_save); }
+  MyAutoThreadSaver(bool isToSave):_isToSave(isToSave),_save(0) { if(_isToSave) _save=PyEval_SaveThread(); }
+  ~MyAutoThreadSaver() { if(_isToSave) PyEval_RestoreThread(_save); }
 private:
+  bool _isToSave;
   PyThreadState *_save;
 };
 
@@ -796,7 +797,7 @@ bool YACSEvalYFXGraphGenInteractive::go(bool stopASAP, YACSEvalSession *session)
   YACS::ENGINE::Executor exe;
   exe.setKeepGoingProperty(!stopASAP);
   {
-    MyAutoThreadSaver locker;
+    MyAutoThreadSaver locker(!session->isAttached());
     exe.RunW(getUndergroundGeneratedGraph());
   }
   return getUndergroundGeneratedGraph()->getState()==YACS::DONE;