Gui: fix random crashes under load in icon_animation (#859)

This commit is contained in:
あく 2021-12-02 01:13:21 +03:00 committed by GitHub
parent b912cc7991
commit 41b5d5f5c9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -13,6 +13,8 @@ IconAnimation* icon_animation_alloc(const Icon* icon) {
void icon_animation_free(IconAnimation* instance) { void icon_animation_free(IconAnimation* instance) {
furi_assert(instance); furi_assert(instance);
icon_animation_stop(instance);
while(xTimerIsTimerActive(instance->timer) == pdTRUE) osDelay(1);
furi_check(osTimerDelete(instance->timer) == osOK); furi_check(osTimerDelete(instance->timer) == osOK);
free(instance); free(instance);
} }
@ -65,8 +67,9 @@ void icon_animation_start(IconAnimation* instance) {
furi_assert(instance->icon->frame_rate); furi_assert(instance->icon->frame_rate);
furi_check( furi_check(
xTimerChangePeriod( xTimerChangePeriod(
instance->timer, (osKernelGetTickFreq() / instance->icon->frame_rate), 0) == instance->timer,
pdPASS); (osKernelGetTickFreq() / instance->icon->frame_rate),
portMAX_DELAY) == pdPASS);
} }
} }
@ -74,7 +77,7 @@ void icon_animation_stop(IconAnimation* instance) {
furi_assert(instance); furi_assert(instance);
if(instance->animating) { if(instance->animating) {
instance->animating = false; instance->animating = false;
furi_check(xTimerStop(instance->timer, 0) == pdPASS); furi_check(xTimerStop(instance->timer, portMAX_DELAY) == pdPASS);
instance->frame = 0; instance->frame = 0;
} }
} }