fix: LWS HTTP connection leak, grain index alignment, and reader head tracking

- control_server: add Connection: close header + always return -1 after
  HTTP response to force-close connection. Without this, lws_service()
  blocks forever after the first POST /cmd, freezing the node process loop.
- passthrough: initialize read_index_ to runtime.headIndex when reader
  is added (prevents TOO_EARLY errors on first read)
- passthrough: handle MXL_ERR_OUT_OF_RANGE_TOO_EARLY in addition to
  TOO_LATE (both jump to head index)
- passthrough: use grain_info.index as writer index instead of separate
  write_index_ counter (MXL writers must use TAI-based grain indices)
- passthrough: reduce grain read timeout from 100ms to 20ms for tighter
  loop with LWS poll
- node_runner: add 'status' command handler that sends node status
  back via control server
This commit is contained in:
Johanness
2026-05-26 22:22:46 +03:00
parent 5b2d420e71
commit 3e1477c56c
3 changed files with 26 additions and 14 deletions
+8
View File
@@ -144,6 +144,14 @@ int NodeRunner::exec(std::unique_ptr<Node> node) {
}
});
control_server->register_command("status", [&](const nlohmann::json& /*msg*/) {
nlohmann::json resp;
resp["event"] = "status";
resp["node_id"] = node_id_;
resp["data"] = node->status();
control_server->send_event(resp);
});
control_server->register_command("shutdown", [&](const nlohmann::json& /*msg*/) {
spdlog::info("Shutdown command received");
g_running = false;