fix(updates): resolve component update hang and multiple page reload loop

- action.uc: sweep stuck flock 1000 processes before tachyon restart, bound service restart with 25s timeout, and prevent worker lockup
- shell/index.ts: add 15-minute general hard timeout for non-Tachyon components to prevent infinite modal spin; allow same-version confirmation for both install and reinstall
- package.uc: remove disruptive uhttpd restart from luci_postinst to prevent active socket drops
- ui.uc: refresh stale PID state before checking value.running in action_ack so dead jobs can always be acknowledged
- initController.ts & sessionJobs.ts: persist handled job IDs across reloads in sessionStorage, eliminate redundant modal popups on page reload, and guard against concurrent reloads with safeReloadPage
- renderUpdateProgressModal.ts: record active job before reload and poll readiness with fast health check instead of blind 5s freeze
This commit is contained in:
Dushnilin
2026-09-03 07:36:30 +03:00
parent 36fe7ef312
commit abaa891dd3
12 changed files with 417 additions and 119 deletions
-2
View File
@@ -299,8 +299,6 @@ function luci_postinst() {
if (!PACKAGE_TEST_MODE) {
if (path_exists("/etc/init.d/rpcd"))
command_success_from_args([ "/etc/init.d/rpcd", "restart" ]);
if (path_exists("/etc/init.d/uhttpd"))
command_success_from_args([ "/etc/init.d/uhttpd", "restart" ]);
command_success_from_args([ "logger", "-t", "tachyon", "[info] Package defaults applied" ]);
}
return true;
+9
View File
@@ -1470,7 +1470,16 @@ function action_ack(kind, job_id_value) {
return;
}
refresh_pid_job_state(path, "UI action worker exited unexpectedly");
let value = read_json_file(path);
if (type(value) == "object" && value.running === true) {
let pid = as_string(value.pid || "");
if (!job_pid_valid(pid) || !pid_running(pid)) {
write_stale_action_state(path, "UI action worker is no longer running");
value = read_json_file(path);
}
}
if (type(value) == "object" && value.running === true) {
action_start_response(false, job_id_value, "UI action is still running");
exit(1);