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 @@
+
+
+
+