From 29f1f4864e6f6c161f0f70a429bb74ebc75e3694 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 26 Jan 2008 23:18:30 +0000 Subject: [PATCH] delete the event object in ProcessPendingEvents() even if the handler throws an exception (bug 1836010) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_8_BRANCH@51391 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/event.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/common/event.cpp b/src/common/event.cpp index 22f3b07bc3..4221dcf540 100644 --- a/src/common/event.cpp +++ b/src/common/event.cpp @@ -41,6 +41,11 @@ #endif // wxUSE_GUI #endif +#include "wx/ptr_scpd.h" + +wxDECLARE_SCOPED_PTR(wxEvent, wxEventPtr) +wxDEFINE_SCOPED_PTR(wxEvent, wxEventPtr) + // ---------------------------------------------------------------------------- // wxWin macros // ---------------------------------------------------------------------------- @@ -1170,9 +1175,9 @@ void wxEvtHandler::ProcessPendingEvents() node; node = m_pendingEvents->GetFirst() ) { - wxEvent *event = (wxEvent *)node->GetData(); + wxEventPtr event(wx_static_cast(wxEvent *, node->GetData())); - // It's importan we remove event from list before processing it. + // It's important we remove event from list before processing it. // Else a nested event loop, for example from a modal dialog, might // process the same event again. @@ -1182,8 +1187,6 @@ void wxEvtHandler::ProcessPendingEvents() ProcessEvent(*event); - delete event; - wxENTER_CRIT_SECT( Lock() ); if ( --n == 0 )