diff --git a/checkin_notes b/checkin_notes index e0d15155e5..4e2a07a749 100755 --- a/checkin_notes +++ b/checkin_notes @@ -13515,3 +13515,19 @@ Charlie 1 Nov 2005 mac_build/ boinc.pbproj/ project.pbxproj + +Rom 2 Nov 2005 + - Catch exceptions thrown by the STL library when vectors may not contain + the requested data. For some reason the list views are trying to + populate themselves with data during a connection cycle which means + the various tabs cache's are empty. We now just return an empty string + in this condition. This should clean up a few crash conditions on + platforms other than Windows. + + clientgui/ + BOINCBaseView.cpp + MainFrame.cpp + ViewProjects.cpp + ViewResources.cpp + ViewTransfers.cpp + ViewWork.cpp diff --git a/clientgui/BOINCBaseView.cpp b/clientgui/BOINCBaseView.cpp index 84c5dcc16f..38a6cf9054 100644 --- a/clientgui/BOINCBaseView.cpp +++ b/clientgui/BOINCBaseView.cpp @@ -338,9 +338,9 @@ int CBOINCBaseView::SyncronizeCache() { int iRowTotal = 0; int iColumnIndex = 0; int iColumnTotal = 0; - wxString strDocumentText = wxEmptyString; - wxString strListPaneText = wxEmptyString; - bool bNeedRefreshData = false; + wxString strDocumentText = wxEmptyString; + wxString strListPaneText = wxEmptyString; + bool bNeedRefreshData = false; iRowTotal = GetDocCount(); iColumnTotal = m_pListPane->GetColumnCount(); diff --git a/clientgui/MainFrame.cpp b/clientgui/MainFrame.cpp index 6e872a4109..9fd3f62e67 100644 --- a/clientgui/MainFrame.cpp +++ b/clientgui/MainFrame.cpp @@ -1372,7 +1372,7 @@ void CMainFrame::OnConnect(CMainFrameEvent&) { m_pFrameListPanelRenderTimer->Start(); m_pDocumentPollTimer->Start(); - m_pNotebook->SetSelection(ID_LIST_MESSAGESVIEW - ID_LIST_BASE); + m_pNotebook->SetSelection(ID_TASK_MESSAGESVIEW - ID_TASK_BASE); } wxLogTrace(wxT("Function Start/End"), wxT("CMainFrame::OnConnect - Function End")); diff --git a/clientgui/ViewProjects.cpp b/clientgui/ViewProjects.cpp index 57f135bffe..9200cd33c8 100644 --- a/clientgui/ViewProjects.cpp +++ b/clientgui/ViewProjects.cpp @@ -398,31 +398,39 @@ wxInt32 CViewProjects::GetDocCount() { wxString CViewProjects::OnListGetItemText(long item, long column) const { - CProject* project = m_ProjectCache.at(item); + CProject* project = NULL; wxString strBuffer = wxEmptyString; - switch(column) { - case COLUMN_PROJECT: - strBuffer = project->m_strProjectName; - break; - case COLUMN_ACCOUNTNAME: - strBuffer = project->m_strAccountName; - break; - case COLUMN_TEAMNAME: - strBuffer = project->m_strTeamName; - break; - case COLUMN_TOTALCREDIT: - strBuffer = project->m_strTotalCredit; - break; - case COLUMN_AVGCREDIT: - strBuffer = project->m_strAVGCredit; - break; - case COLUMN_RESOURCESHARE: - strBuffer = project->m_strResourceShare; - break; - case COLUMN_STATUS: - strBuffer = project->m_strStatus; - break; + try { + project = m_ProjectCache.at(item); + } catch ( std::out_of_range ) { + project = NULL; + } + + if (project) { + switch(column) { + case COLUMN_PROJECT: + strBuffer = project->m_strProjectName; + break; + case COLUMN_ACCOUNTNAME: + strBuffer = project->m_strAccountName; + break; + case COLUMN_TEAMNAME: + strBuffer = project->m_strTeamName; + break; + case COLUMN_TOTALCREDIT: + strBuffer = project->m_strTotalCredit; + break; + case COLUMN_AVGCREDIT: + strBuffer = project->m_strAVGCredit; + break; + case COLUMN_RESOURCESHARE: + strBuffer = project->m_strResourceShare; + break; + case COLUMN_STATUS: + strBuffer = project->m_strStatus; + break; + } } return strBuffer; diff --git a/clientgui/ViewResources.cpp b/clientgui/ViewResources.cpp index 7793510337..5be7e08dd6 100644 --- a/clientgui/ViewResources.cpp +++ b/clientgui/ViewResources.cpp @@ -108,17 +108,25 @@ wxInt32 CViewResources::GetDocCount() { wxString CViewResources::OnListGetItemText(long item, long column) const { - CResource* resource = m_ResourceCache.at(item); + CResource* resource = NULL; wxString strBuffer = wxEmptyString; - switch(column) - { - case COLUMN_PROJECT: - strBuffer = resource->m_strProjectName; - break; - case COLUMN_DISKSPACE: - strBuffer = resource->m_strDiskSpace; - break; + try { + resource = m_ResourceCache.at(item); + } catch ( std::out_of_range ) { + resource = NULL; + } + + if (resource) { + switch(column) + { + case COLUMN_PROJECT: + strBuffer = resource->m_strProjectName; + break; + case COLUMN_DISKSPACE: + strBuffer = resource->m_strDiskSpace; + break; + } } return strBuffer; diff --git a/clientgui/ViewTransfers.cpp b/clientgui/ViewTransfers.cpp index 3d163df21f..df7136147c 100644 --- a/clientgui/ViewTransfers.cpp +++ b/clientgui/ViewTransfers.cpp @@ -221,28 +221,36 @@ wxString CViewTransfers::OnListGetItemText(long item, long column) const { CTransfer* transfer = m_TransferCache.at(item); wxString strBuffer = wxEmptyString; - switch(column) { - case COLUMN_PROJECT: - strBuffer = transfer->m_strProjectName; - break; - case COLUMN_FILE: - strBuffer = transfer->m_strFileName; - break; - case COLUMN_PROGRESS: - strBuffer = transfer->m_strProgress; - break; - case COLUMN_SIZE: - strBuffer = transfer->m_strSize; - break; - case COLUMN_TIME: - strBuffer = transfer->m_strTime; - break; - case COLUMN_SPEED: - strBuffer = transfer->m_strSpeed; - break; - case COLUMN_STATUS: - strBuffer = transfer->m_strStatus; - break; + try { + transfer = m_TransferCache.at(item); + } catch ( std::out_of_range ) { + transfer = NULL; + } + + if (transfer) { + switch(column) { + case COLUMN_PROJECT: + strBuffer = transfer->m_strProjectName; + break; + case COLUMN_FILE: + strBuffer = transfer->m_strFileName; + break; + case COLUMN_PROGRESS: + strBuffer = transfer->m_strProgress; + break; + case COLUMN_SIZE: + strBuffer = transfer->m_strSize; + break; + case COLUMN_TIME: + strBuffer = transfer->m_strTime; + break; + case COLUMN_SPEED: + strBuffer = transfer->m_strSpeed; + break; + case COLUMN_STATUS: + strBuffer = transfer->m_strStatus; + break; + } } return strBuffer; diff --git a/clientgui/ViewWork.cpp b/clientgui/ViewWork.cpp index 1abf7e27ea..f02360ed19 100644 --- a/clientgui/ViewWork.cpp +++ b/clientgui/ViewWork.cpp @@ -293,34 +293,42 @@ wxInt32 CViewWork::GetDocCount() { wxString CViewWork::OnListGetItemText(long item, long column) const { - CWork* work = m_WorkCache.at(item); + CWork* work = NULL; wxString strBuffer = wxEmptyString; - switch(column) { - case COLUMN_PROJECT: - strBuffer = work->m_strProjectName; - break; - case COLUMN_APPLICATION: - strBuffer = work->m_strApplicationName; - break; - case COLUMN_NAME: - strBuffer = work->m_strName; - break; - case COLUMN_CPUTIME: - strBuffer = work->m_strCPUTime; - break; - case COLUMN_PROGRESS: - strBuffer = work->m_strProgress; - break; - case COLUMN_TOCOMPLETION: - strBuffer = work->m_strTimeToCompletion; - break; - case COLUMN_REPORTDEADLINE: - strBuffer = work->m_strReportDeadline; - break; - case COLUMN_STATUS: - strBuffer = work->m_strStatus; - break; + try { + work = m_WorkCache.at(item); + } catch ( std::out_of_range ) { + work = NULL; + } + + if (work) { + switch(column) { + case COLUMN_PROJECT: + strBuffer = work->m_strProjectName; + break; + case COLUMN_APPLICATION: + strBuffer = work->m_strApplicationName; + break; + case COLUMN_NAME: + strBuffer = work->m_strName; + break; + case COLUMN_CPUTIME: + strBuffer = work->m_strCPUTime; + break; + case COLUMN_PROGRESS: + strBuffer = work->m_strProgress; + break; + case COLUMN_TOCOMPLETION: + strBuffer = work->m_strTimeToCompletion; + break; + case COLUMN_REPORTDEADLINE: + strBuffer = work->m_strReportDeadline; + break; + case COLUMN_STATUS: + strBuffer = work->m_strStatus; + break; + } } return strBuffer; diff --git a/win_build/boincmgr_curl.vcproj b/win_build/boincmgr_curl.vcproj index f9af51175b..7f63792e7d 100644 --- a/win_build/boincmgr_curl.vcproj +++ b/win_build/boincmgr_curl.vcproj @@ -147,9 +147,6 @@ Name="Source Files" Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"> - - @@ -235,9 +232,6 @@ - - @@ -519,6 +513,12 @@ + + + +