diff --git a/src/os/shared/src/osapi-common.c b/src/os/shared/src/osapi-common.c index c3b7fb0b5..62a5a433b 100644 --- a/src/os/shared/src/osapi-common.c +++ b/src/os/shared/src/osapi-common.c @@ -337,7 +337,18 @@ void OS_DeleteAllObjects(void) { ObjectCount = 0; ++TryCount; + + /* Delete timers and tasks first, as they could be actively using other object types */ + OS_ForEachObjectOfType(OS_OBJECT_TYPE_OS_TIMECB, OS_OBJECT_CREATOR_ANY, + OS_CleanUpObject, &ObjectCount); + OS_ForEachObjectOfType(OS_OBJECT_TYPE_OS_TIMEBASE, OS_OBJECT_CREATOR_ANY, + OS_CleanUpObject, &ObjectCount); + OS_ForEachObjectOfType(OS_OBJECT_TYPE_OS_TASK, OS_OBJECT_CREATOR_ANY, + OS_CleanUpObject, &ObjectCount); + + /* Then try to delete all other remaining objects of any type */ OS_ForEachObject(OS_OBJECT_CREATOR_ANY, OS_CleanUpObject, &ObjectCount); + if (ObjectCount == 0 || TryCount > 4) { break;