]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
PAL12755: EDF: SALOME frozen with Load Script and a Python Module. Additional fix.
authorjfa <jfa@opencascade.com>
Tue, 15 Aug 2006 09:47:29 +0000 (09:47 +0000)
committerjfa <jfa@opencascade.com>
Tue, 15 Aug 2006 09:47:29 +0000 (09:47 +0000)
src/SALOME_PY/SalomePy.cxx
src/SALOME_PYQT/SalomePyQt/SalomePyQt_v4.sip
src/SALOME_SWIG/SALOMEGUI_Swig.i

index eb9a2075693991343da4d77e35d29d9a3254b1af..30f5567186baf33bcec8248ded1766ab57b051e2 100755 (executable)
@@ -116,7 +116,12 @@ public:
 };
 extern "C" PyObject *libSalomePy_getRenderer(PyObject *self, PyObject *args)
 {
-  return ProcessEvent( new TGetRendererEvent() );
+  //return ProcessEvent( new TGetRendererEvent() );
+  PyObject * aResult;
+  Py_BEGIN_ALLOW_THREADS // PAL12755
+  aResult = ProcessEvent( new TGetRendererEvent() );
+  Py_END_ALLOW_THREADS // PAL12755
+  return aResult;
 }
 
 /*!
@@ -137,7 +142,12 @@ public:
 };
 extern "C" PyObject *libSalomePy_getRenderWindow(PyObject *self, PyObject *args)
 {
-  return ProcessEvent( new TGetRenderWindowEvent() );
+  //return ProcessEvent( new TGetRenderWindowEvent() );
+  PyObject * aResult;
+  Py_BEGIN_ALLOW_THREADS // PAL12755
+  aResult = ProcessEvent( new TGetRenderWindowEvent() );
+  Py_END_ALLOW_THREADS // PAL12755
+  return aResult;
 }
 
 /*!
@@ -158,7 +168,12 @@ public:
 };
 extern "C" PyObject *libSalomePy_getRenderWindowInteractor(PyObject *self, PyObject *args)
 {
-  return ProcessEvent( new TGetRenderWindowInteractorEvent() );
+  //return ProcessEvent( new TGetRenderWindowInteractorEvent() );
+  PyObject * aResult;
+  Py_BEGIN_ALLOW_THREADS // PAL12755
+  aResult = ProcessEvent( new TGetRenderWindowInteractorEvent() );
+  Py_END_ALLOW_THREADS // PAL12755
+  return aResult;
 }
 
 /*!
index 3d0196f88ada474ff0e9dfd4d5492fe2023dc745..a1a1c046aea65d1b8313fc59e60d14058a0f30aa 100644 (file)
@@ -18,9 +18,9 @@ class SALOME_Selection : QObject
 %End
 
 public:
-  void Clear();
-  void ClearIObjects();
-  void ClearFilters();
+  void Clear() /ReleaseGIL/ ;
+  void ClearIObjects() /ReleaseGIL/ ;
+  void ClearFilters() /ReleaseGIL/ ;
 
 private:
   SALOME_Selection( QObject* /TransferThis/ );
@@ -63,71 +63,71 @@ class SalomePyQt
 %End
 
 public:
-  static QWidget*          getDesktop();
-  static QWidget*          getMainFrame();
-  static QMenuBar*         getMainMenuBar();
-  static QPopupMenu*       getPopupMenu( const MenuName );
-  static SALOME_Selection* getSelection() /Factory/;
-  static int               getStudyId();
-  static void              putInfo( const QString&, const int = 0 );
-  static const QString     getActiveComponent();
-  static void              updateObjBrowser( const int = 0, bool = true );
+  static QWidget*          getDesktop() /ReleaseGIL/ ;
+  static QWidget*          getMainFrame() /ReleaseGIL/ ;
+  static QMenuBar*         getMainMenuBar() /ReleaseGIL/ ;
+  static QPopupMenu*       getPopupMenu( const MenuName ) /ReleaseGIL/ ;
+  static SALOME_Selection* getSelection() /Factory,ReleaseGIL/ ;
+  static int               getStudyId() /ReleaseGIL/ ;
+  static void              putInfo( const QString&, const int = 0 ) /ReleaseGIL/ ;
+  static const QString     getActiveComponent() /ReleaseGIL/ ;
+  static void              updateObjBrowser( const int = 0, bool = true ) /ReleaseGIL/ ;
 
   static QString           getFileName         ( QWidget*, const QString&, const QStringList&, const QString&, bool ) /ReleaseGIL/ ;
   static QStringList       getOpenFileNames    ( QWidget*, const QString&, const QStringList&, const QString& ) /ReleaseGIL/ ;
   static QString           getExistingDirectory( QWidget*, const QString&, const QString& ) /ReleaseGIL/ ;
 
-  static void              helpContext( const QString&, const QString& );
+  static void              helpContext( const QString&, const QString& ) /ReleaseGIL/ ;
 
-  static bool              dumpView( const QString& );
+  static bool              dumpView( const QString& ) /ReleaseGIL/ ;
 
-  static int               defaultMenuGroup();
+  static int               defaultMenuGroup() /ReleaseGIL/ ;
 
-  static int               createTool( const QString& );
-  static int               createTool( const int,  const int,      const int = -1 );
-  static int               createTool( const int,  const QString&, const int = -1 );
-  static int               createTool( QtxAction*, const int,      const int = -1, const int = -1 );
-  static int               createTool( QtxAction*, const QString&, const int = -1, const int = -1 );
+  static int               createTool( const QString& ) /ReleaseGIL/ ;
+  static int               createTool( const int,  const int,      const int = -1 ) /ReleaseGIL/ ;
+  static int               createTool( const int,  const QString&, const int = -1 ) /ReleaseGIL/ ;
+  static int               createTool( QtxAction*, const int,      const int = -1, const int = -1 ) /ReleaseGIL/ ;
+  static int               createTool( QtxAction*, const QString&, const int = -1, const int = -1 ) /ReleaseGIL/ ;
 
   static int               createMenu( const QString&, const int,
-                                      const int = -1, const int = -1, const int = -1 );
+                                      const int = -1, const int = -1, const int = -1 ) /ReleaseGIL/ ;
   static int               createMenu( const QString&, const QString&, 
-                                      const int = -1, const int = -1, const int = -1 );
+                                      const int = -1, const int = -1, const int = -1 ) /ReleaseGIL/ ;
   static int               createMenu( const int,      const int,
-                                      const int = -1, const int = -1 );
+                                      const int = -1, const int = -1 ) /ReleaseGIL/ ;
   static int               createMenu( const int,      const QString&, 
-                                      const int = -1, const int = -1 );
+                                      const int = -1, const int = -1 ) /ReleaseGIL/ ;
   static int               createMenu( QtxAction*,     const int,      const int = -1, 
-                                      const int = -1, const int = -1 );
+                                      const int = -1, const int = -1 ) /ReleaseGIL/ ;
   static int               createMenu( QtxAction*,     const QString&, const int = -1, 
-                                      const int = -1, const int = -1 );
-  static QtxAction*        createSeparator();
+                                      const int = -1, const int = -1 ) /ReleaseGIL/ ;
+  static QtxAction*        createSeparator() /ReleaseGIL/ ;
 
   static QtxAction*        createAction( const int, const QString&, 
                                         const QString& = QString::null, const QString& = QString::null, 
-                                        const QString& = QString::null, const int = 0, const bool = false );
+                                        const QString& = QString::null, const int = 0, const bool = false ) /ReleaseGIL/ ;
 
-  static QtxAction*        action( const int );
-  static int               actionId( const QtxAction* );
+  static QtxAction*        action( const int ) /ReleaseGIL/ ;
+  static int               actionId( const QtxAction* ) /ReleaseGIL/ ;
 
   static bool              clearMenu( const int = 0, const int = 0,
-                                     const bool = true );
-
-  static void              addSetting    ( const QString&, const QString&, const double );
-  static void              addSetting    ( const QString&, const QString&, const int /Constrained/ );
-  static void              addSetting    ( const QString&, const QString&, const QString& );
-  static void              addSetting    ( const QString&, const QString&, const QColor& );
-  static int               integerSetting( const QString&, const QString&, const int = 0 );
-  static double            doubleSetting ( const QString&, const QString&, const int = 0 );
-  static bool              boolSetting   ( const QString&, const QString&, const bool = false );
-  static QString           stringSetting ( const QString&, const QString&, const QString& = QString("") );
-  static QColor            colorSetting  ( const QString&, const QString&, const QColor& = QColor() );
-  static void              removeSetting ( const QString&, const QString& );
+                                     const bool = true ) /ReleaseGIL/ ;
+
+  static void              addSetting    ( const QString&, const QString&, const double ) /ReleaseGIL/ ;
+  static void              addSetting    ( const QString&, const QString&, const int /Constrained/ ) /ReleaseGIL/ ;
+  static void              addSetting    ( const QString&, const QString&, const QString& ) /ReleaseGIL/ ;
+  static void              addSetting    ( const QString&, const QString&, const QColor& ) /ReleaseGIL/ ;
+  static int               integerSetting( const QString&, const QString&, const int = 0 ) /ReleaseGIL/ ;
+  static double            doubleSetting ( const QString&, const QString&, const int = 0 ) /ReleaseGIL/ ;
+  static bool              boolSetting   ( const QString&, const QString&, const bool = false ) /ReleaseGIL/ ;
+  static QString           stringSetting ( const QString&, const QString&, const QString& = QString("") ) /ReleaseGIL/ ;
+  static QColor            colorSetting  ( const QString&, const QString&, const QColor& = QColor() ) /ReleaseGIL/ ;
+  static void              removeSetting ( const QString&, const QString& ) /ReleaseGIL/ ;
 
 // obsolete
-  static void              addStringSetting( const QString&, const QString&, bool = true );
-  static void              addIntSetting   ( const QString&, const int,      bool = true );
-  static void              addDoubleSetting( const QString&, const double,   bool = true );
-  static void              removeSettings  ( const QString& );
-  static QString           getSetting      ( const QString& );
+  static void              addStringSetting( const QString&, const QString&, bool = true ) /ReleaseGIL/ ;
+  static void              addIntSetting   ( const QString&, const int,      bool = true ) /ReleaseGIL/ ;
+  static void              addDoubleSetting( const QString&, const double,   bool = true ) /ReleaseGIL/ ;
+  static void              removeSettings  ( const QString& ) /ReleaseGIL/ ;
+  static QString           getSetting      ( const QString& ) /ReleaseGIL/ ;
 };
index e960e05bfdae046f4b38f56c49513b18e5c3ef1c..01eda8ec4f43f2eb38ac0bacf37aca30cb59b4c3 100644 (file)
 
 /* Exception handler for all functions */
 %exception {
-   Py_BEGIN_ALLOW_THREADS
-   $action
-   Py_END_ALLOW_THREADS
+  class PyAllowThreadsGuard {
+   public:
+    // Py_BEGIN_ALLOW_THREADS
+    PyAllowThreadsGuard() { _save = PyEval_SaveThread(); }
+    // Py_END_ALLOW_THREADS
+    ~PyAllowThreadsGuard() { PyEval_RestoreThread(_save); }
+   private:
+    PyThreadState *_save;
+  };
+
+  PyAllowThreadsGuard guard;
+
+  try {
+    $action
+  }
+  catch(...) {
+    PyErr_SetString(PyExc_RuntimeError,"Unknown exception caught");
+    return NULL;
+  }
 }
 
 class SALOMEGUI_Swig