fix(node): don't get stranded when the daemon can't start on startup
Two failure modes left the wallet stuck on a silent "connecting / Starting dragonxd…" spinner with no path forward: 1. Stale external-daemon latch. EmbeddedDaemon::start() sets external_daemon_detected_ whenever the RPC port was busy at a prior attempt and never re-checks it, so tryConnect's no-config branch trusted that latch and waited forever for a config the phantom would never write — even after a stale/half-dead process freed the port. Now the port is re-evaluated LIVE (EmbeddedDaemon::isRpcPortInUse()) each attempt: if it's genuinely busy we keep waiting (and, after a bounded ~20s with no config, warn that whatever owns the port isn't a usable DragonX node and how to fix it); if it's free we fall through and start our own daemon. 2. Silent start failure. When startEmbeddedDaemon() failed (binary not found, Sapling params missing, spawn failure) the status stayed on "Starting dragonxd…" with the real reason only in a VERBOSE log. Now the reason (daemon_controller_->lastError()) is surfaced once as a sticky error notification, with a short "Couldn't start dragonxd" status. Both counters reset on a successful connect so the messages re-arm for the next disconnect. Lite is unaffected (tryConnect returns early for lite builds). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -507,6 +507,10 @@ private:
|
||||
std::string connection_status_ = "Disconnected";
|
||||
bool connection_in_progress_ = false;
|
||||
bool remote_rpc_plaintext_warning_shown_ = false;
|
||||
// Startup daemon-launch diagnostics: bound the "RPC port busy, no config" wait before warning,
|
||||
// and show the embedded-daemon start failure (binary/params/spawn) only once. Reset on connect.
|
||||
int daemon_wait_attempts_ = 0;
|
||||
bool daemon_start_error_shown_ = false;
|
||||
float loading_timer_ = 0.0f; // spinner animation for loading overlay
|
||||
|
||||
// Current page (sidebar navigation)
|
||||
|
||||
Reference in New Issue
Block a user