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:
_FLOGE("Failed to execl(%s %s %s %s)", FOTA_TRIGGER_PATH, deltas.first_delta, deltas.second_delta,
FOTA_TRIGGER_MODE_RO_UPDATE_AND_FINISH_UPDATE);
- exit(EXIT_FAILURE);
+ goto trigger_failed;
}
/* Since we double forked, we have to wait for the first child (otherwise
free(deltas.first_delta);
if (deltas.second_delta)
free(deltas.second_delta);
+ 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);
}
int fota_installer_ro_update(pid_t sender_pid)
_FLOGE("Failed to execl(%s %s %s %s)", FOTA_TRIGGER_PATH, deltas.first_delta,
deltas.second_delta, FOTA_TRIGGER_MODE_RO_UPDATE);
- exit(EXIT_FAILURE);
+ goto trigger_failed;
}
ret = waitpid(pid, &exec_status, 0);
free(deltas.first_delta);
if (deltas.second_delta)
free(deltas.second_delta);
+ 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);
}
int fota_installer_finish_update(void)