return -1;
}
+ ret = hal_device_board_set_upgrade_progress_status(0);
+ if (ret < 0) {
+ _FLOGE("Failed to set upgrade progress status(%d): %d", 0, ret);
+ return -1;
+ }
+
_FLOGI("Succeed to set upgrade state %s -> %s", current_upgrade_state,
next_upgrade_state);
/* Double fork to avoid zombies */
switch (fork()) {
case -1:
- exit(EXIT_FAILURE);
+ goto trigger_failed;
case 0:
break;
default:
if (ret == -1)
_FLOGE("Failed to execl(%s %s)", FOTA_TRIGGER_PATH, client_delta_path);
- exit(EXIT_FAILURE);
+ goto trigger_failed;
}
/* Since we double forked, we have to wait for the first child (otherwise
execute_destroy:
if (client_delta_path)
free(client_delta_path);
-
+ if (status < 0) {
+ ret = hal_device_board_set_upgrade_progress_status(-1);
+ if (ret < 0)
+ _FLOGE("Failed to set upgrade progress status(%d): %d",
+ -1, ret);
+ }
return status;
+
+trigger_failed:
+ ret = hal_device_board_set_upgrade_progress_status(-1);
+ if (ret < 0)
+ _FLOGE("Failed to set upgrade progress status(%d): %d", -1, ret);
+ exit(EXIT_FAILURE);
}
static int is_upgrade_completed(void)