diff --git a/clientgui/MainDocument.cpp b/clientgui/MainDocument.cpp index 3b76594ac5..fbf882df72 100644 --- a/clientgui/MainDocument.cpp +++ b/clientgui/MainDocument.cpp @@ -2500,16 +2500,10 @@ wxString result_description(RESULT* result, bool show_resources) { strBuffer += _("Project suspended by user"); } else if (result->suspended_via_gui) { strBuffer += _("Task suspended by user"); - - // do this check before the following because (if dont_suspend_nci is set) - // an NCI task may be running even if computation suspended - // - } else if (result->active_task && result->scheduler_state == CPU_SCHED_SCHEDULED) { - strBuffer += _("Running"); - if (project && project->non_cpu_intensive) { - strBuffer += _(" (non-CPU-intensive)"); - } - } else if (status.task_suspend_reason && !throttled) { + } else if (status.task_suspend_reason && !throttled && result->active_task_state != PROCESS_EXECUTING) { + // an NCI process can be running even though computation is suspended + // (because of + // strBuffer += _("Suspended - "); strBuffer += suspend_reason_wxstring(status.task_suspend_reason); } else if (status.gpu_suspend_reason && uses_gpu(result)) { @@ -2520,6 +2514,11 @@ wxString result_description(RESULT* result, bool show_resources) { strBuffer += _("Waiting for memory"); } else if (result->needs_shmem) { strBuffer += _("Waiting for shared memory"); + } else if (result->scheduler_state == CPU_SCHED_SCHEDULED) { + strBuffer += _("Running"); + if (project && project->non_cpu_intensive) { + strBuffer += _(" (non-CPU-intensive)"); + } } else if (result->scheduler_state == CPU_SCHED_PREEMPTED) { strBuffer += _("Waiting to run"); } else if (result->scheduler_state == CPU_SCHED_UNINITIALIZED) { diff --git a/clientgui/sg_TaskPanel.cpp b/clientgui/sg_TaskPanel.cpp index f806452a61..f4a6bcb3b6 100644 --- a/clientgui/sg_TaskPanel.cpp +++ b/clientgui/sg_TaskPanel.cpp @@ -1148,7 +1148,28 @@ void CSimpleTaskPanel::UpdateTaskSelectionList(bool reskin) { bool CSimpleTaskPanel::isRunning(RESULT* result) { - return (result->scheduler_state == CPU_SCHED_SCHEDULED); + + // It must be scheduled to be running + if ( result->scheduler_state != CPU_SCHED_SCHEDULED ) { + return false; + } + // If either the project or task have been suspended, then it cannot be running + if (result->suspended_via_gui || result->project_suspended_via_gui ) { + return false; + } + CC_STATUS status; + CMainDocument* pDoc = wxGetApp().GetDocument(); + wxASSERT(pDoc); + + pDoc->GetCoreClientStatus(status); + // Make sure that the core client isn't global suspended for some reason + if (status.task_suspend_reason == 0 || status.task_suspend_reason == SUSPEND_REASON_CPU_THROTTLE) { + return true; + } + if (result->active_task_state == PROCESS_EXECUTING) { + return true; + } + return false; }