Mgr: ignore timer events during RPC Wait dialog to prevent unintended recursion and crashes

svn path=/trunk/boinc/; revision=16025
This commit is contained in:
Charlie Fenton 2008-09-19 07:40:39 +00:00
parent 9758c47ffe
commit ab04d935e8
2 changed files with 9 additions and 1 deletions

View File

@ -7557,7 +7557,7 @@ David 18 Sept 2008
clientgui/ clientgui/
AsyncRPC.cpp,h AsyncRPC.cpp,h
Charlie 18 Sep 2008 Charlie 19 Sep 2008
Mgr: The system handles timer events during modal dialogs, such as Mgr: The system handles timer events during modal dialogs, such as
while the RPC Wait dialog is shown. This may cause unintended while the RPC Wait dialog is shown. This may cause unintended
recursion and repeatedly posting the same RPC requests from recursion and repeatedly posting the same RPC requests from
@ -7567,3 +7567,4 @@ Charlie 18 Sep 2008
clientgui/ clientgui/
BOINCBaseFrame.cpp BOINCBaseFrame.cpp
MainDocument.cpp,.h MainDocument.cpp,.h
sg_BoincSimpleGUI.cpp

View File

@ -547,6 +547,13 @@ void CSimplePanel::OnProjectsAttachToProject() {
// called from CSimpleFrame::OnRefreshView() // called from CSimpleFrame::OnRefreshView()
void CSimplePanel::OnFrameRender() { void CSimplePanel::OnFrameRender() {
CMainDocument* pDoc = wxGetApp().GetDocument(); CMainDocument* pDoc = wxGetApp().GetDocument();
wxASSERT(pDoc);
// OnFrameRender() may be called while SimpleGUI initialization is
// in progress due to completion of a periodic get_messages RPC,
// causing unintended recursion in CMainDocument::RequestRPC().
// Check for that situation here.
if (pDoc->WaitingForRPC()) return;
if (IsShown()) { if (IsShown()) {