]> SALOME platform Git repositories - plugins/blsurfplugin.git/commitdiff
Salome HOME
[SALOME platform 0019864]: BLSurf meshing without hypothesis BR_PERF V4_1_3 V4_1_3rc2
authoreap <eap@opencascade.com>
Mon, 9 Jun 2008 09:26:10 +0000 (09:26 +0000)
committereap <eap@opencascade.com>
Mon, 9 Jun 2008 09:26:10 +0000 (09:26 +0000)
     disable FE signals

src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx

index a35f3c4726d51e7cf2f21014d609b6c55f19c8ae..eff67582fdcaf1cf5a953203259eae2624307271 100644 (file)
@@ -69,6 +69,10 @@ extern "C"{
 #include <TopTools_IndexedMapOfShape.hxx>
 #include <BRepTools.hxx>
 
+#ifndef WNT
+#include <fenv.h>
+#endif
+
 //=============================================================================
 /*!
  *  
@@ -343,20 +347,24 @@ bool BLSURFPlugin_BLSURF::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape)
   cout << "Beginning of Surface Mesh generation" << endl;
   cout << endl;
 
-  status_t status = STATUS_ERROR;
+  // Issue 0019864. On DebianSarge, FE signals do not obey to OSD::SetSignal(false)
+#ifndef WNT
+  feclearexcept( FE_ALL_EXCEPT );
+  int oldFEFlags = fedisableexcept( FE_ALL_EXCEPT );
+#endif
+
+    status_t status = STATUS_ERROR;
 
   try {
     OCC_CATCH_SIGNALS;
+
     status = blsurf_compute_mesh(bls);
+
   }
   catch ( std::exception& exc ) {
-//     if ( !_comment.empty() )
-//       _comment += "\n";
     _comment += exc.what();
   }
   catch (Standard_Failure& ex) {
-//     if ( !_comment.empty() )
-//       _comment += "\n";
     _comment += ex.DynamicType()->Name();
     if ( ex.GetMessageString() && strlen( ex.GetMessageString() )) {
       _comment += ": ";
@@ -373,7 +381,6 @@ bool BLSURFPlugin_BLSURF::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape)
     context_delete(ctx);
 
     return error(_comment);
-    //return false;
   }
 
   cout << endl;
@@ -487,6 +494,13 @@ bool BLSURFPlugin_BLSURF::Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape)
 
   context_delete(ctx);
 
+  // Issue 0019864. On DebianSarge, FE signals do not obey to OSD::SetSignal(false)
+#ifndef WNT
+  if ( oldFEFlags > 0 )    
+    feenableexcept( oldFEFlags );
+  feclearexcept( FE_ALL_EXCEPT );
+#endif
+
   return true;
 }