Index: src/libchcore/TTaskManager.cpp =================================================================== diff -u -N -r2fe97a93f21771d75901d4b6559057d1ea055104 -rc9092a6f41bed1c132d5d5ddfe430e8b3ddd70ca --- src/libchcore/TTaskManager.cpp (.../TTaskManager.cpp) (revision 2fe97a93f21771d75901d4b6559057d1ea055104) +++ src/libchcore/TTaskManager.cpp (.../TTaskManager.cpp) (revision c9092a6f41bed1c132d5d5ddfe430e8b3ddd70ca) @@ -155,7 +155,9 @@ THROW_CORE_EXCEPTION(eErr_InvalidPointer); // delete only when the thread is finished - if((spTask->GetTaskState() == eTaskState_Finished || spTask->GetTaskState() == eTaskState_Cancelled)) + ETaskCurrentState eState = spTask->GetTaskState(); + + if((eState == eTaskState_Finished || eState == eTaskState_Cancelled || eState == eTaskState_LoadError)) { spTask->KillThread(); @@ -191,14 +193,19 @@ THROW_CORE_EXCEPTION(eErr_InvalidPointer); // delete only when the thread is finished - if(spTask == spSelTask && (spTask->GetTaskState() == eTaskState_Finished || spTask->GetTaskState() == eTaskState_Cancelled)) + if(spTask == spSelTask) { - spTask->KillThread(); + ETaskCurrentState eState = spTask->GetTaskState(); - spTask->OnUnregisterTask(); + if(eState == eTaskState_Finished || eState == eTaskState_Cancelled || eState == eTaskState_LoadError) + { + spTask->KillThread(); - vTasksToRemove.push_back(rEntry.GetTaskSerializeLocation()); - m_tTasks.RemoveAt(stIndex); + spTask->OnUnregisterTask(); + + vTasksToRemove.push_back(rEntry.GetTaskSerializeLocation()); + m_tTasks.RemoveAt(stIndex); + } break; } } @@ -346,7 +353,7 @@ THROW_CORE_EXCEPTION(eErr_InvalidPointer); ETaskCurrentState eState = spTask->GetTaskState(); - bFlag = (eState == eTaskState_Finished || eState == eTaskState_Cancelled || eState == eTaskState_Paused || eState == eTaskState_Error); + bFlag = (eState == eTaskState_Finished || eState == eTaskState_Cancelled || eState == eTaskState_Paused || eState == eTaskState_Error || eState == eTaskState_LoadError); if(!bFlag) break;