From 1a2cff525dca3b3d09011853eb7a848c6e3f7860 Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 7 Nov 2007 09:31:16 +0000 Subject: [PATCH] PAL16774 (Crash after display of many groups) + virtual void studyClosed( SUIT_Study* ); and catch during visualization --- src/SMESHGUI/SMESHGUI.cxx | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 0db20e7da..f4cd58ae6 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -146,6 +146,8 @@ #include "SALOMEDSClient_StudyBuilder.hxx" #include "SALOMEDSClient_SComponent.hxx" +#include + using namespace std; //namespace{ @@ -1348,7 +1350,18 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 214: // UPDATE { if(checkLock(aStudy)) break; - SMESH::UpdateView(); + try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif + SMESH::UpdateView(); + } + catch (std::bad_alloc) { // PAL16774 (Crash after display of many groups) + SMESH::OnVisuException(); + } + catch (...) { // PAL16774 (Crash after display of many groups) + SMESH::OnVisuException(); + } SALOME_ListIO l; LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -1379,12 +1392,16 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) extractContainers( sel_objects, to_process ); try { +#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 + OCC_CATCH_SIGNALS; +#endif if (vtkwnd) { SALOME_ListIteratorOfListIO It( to_process ); for (; It.More(); It.Next()) { Handle(SALOME_InteractiveObject) IOS = It.Value(); if (IOS->hasEntry()) { - SMESH::UpdateView(anAction, IOS->getEntry()); + if (!SMESH::UpdateView(anAction, IOS->getEntry())) + break; // PAL16774 (Crash after display of many groups) if (anAction == SMESH::eDisplayOnly) anAction = SMESH::eDisplay; } @@ -3030,6 +3047,12 @@ bool SMESHGUI::deactivateModule( SUIT_Study* study ) return SalomeApp_Module::deactivateModule( study ); } +void SMESHGUI::studyClosed( SUIT_Study* s ) +{ + SMESH::RemoveVisuData( s->id() ); + SalomeApp_Module::studyClosed( s ); +} + void SMESHGUI::OnGUIEvent() { const QObject* obj = sender(); -- 2.39.2