mirror of
https://github.com/wownero/wowlet.git
synced 2026-11-01 05:38:44 +01:00
v5.0.1: Windows QtQuick crash fix + node/Tor lifecycle overhaul
Windows crash chain (exposed by the embedded-node default): - main.cpp: force the QtQuick software renderer. The Mining tab's QQuickWidget drove the default RHI/GL path and faulted (0xc0000005) on broken-GL hosts (VirtualBox VMSVGA), crashing the app and orphaning the embedded node. Real hardware was unaffected. - ChildProcessGuard + DaemonManager/TorManager: kernel-level die-with-parent (Windows Job Object KILL_ON_JOB_CLOSE / Linux PR_SET_PDEATHSIG) so the embedded wownerod and bundled tor never survive a wowlet exit or crash. - DaemonManager: verify-before-adopt via get_info (nettype/height) instead of trusting a bare open RPC port, so a stale/orphan node is never adopted. Node/Tor lifecycle + remote-node connectivity: - config: torPrivacyLevel default -> allTorExceptNode. NEVER sync blocks over Tor; the wallet's node connection is always clearnet. Tor is only for tx broadcast, so remote nodes work with or without Tor. - nodes: add Nodes::reconnect() (clear failure blocklist + force reconnect); node/Tor toggle handlers use it so a transient outage no longer strands the wallet at "Disconnected". - MainWindow/SettingsDialog: reconnect on node/Tor toggle and on the async daemonStateChanged (closes the start() race; a freshly-toggled local node connects immediately). - TorManager: reset retry/unpack state in init() so a system<->bundled Tor re-toggle can start again; quiesce on stop(). Linux unpackBins() rework (mkpath + presence-based unpack + graceful return-false), getVersion() arg fix, and a missing-binary start guard. - build.yml: derive TOR_VERSION from the embedded tor binary (a hardcoded bundle number made unpackBins rewrite Tor every launch). - depends/funcs.mk: confine cross-cmake find_package to the depends sysroot so host -dev libraries don't leak into the build.
This commit is contained in:
+9
-1
@@ -36,6 +36,7 @@
|
||||
#include "utils/AppData.h"
|
||||
#include "utils/AsyncTask.h"
|
||||
#include "utils/ColorScheme.h"
|
||||
#include "utils/DaemonManager.h" // wowlet: for daemonStateChanged reconnect (node-toggle race)
|
||||
#include "utils/Icons.h"
|
||||
#include "utils/TorManager.h"
|
||||
#include "utils/WebsocketNotifier.h"
|
||||
@@ -512,6 +513,13 @@ void MainWindow::initWalletContext() {
|
||||
this->onConnectionStatusChanged(status);
|
||||
m_nodes->autoConnect();
|
||||
});
|
||||
// wowlet: the embedded node's RPC port comes up asynchronously after daemonManager()->start(), so a
|
||||
// freshly-toggled local node would otherwise sit Disconnected until the next status tick. Reconnect the
|
||||
// instant its RPC is up. (autoConnect's runLocalNode branch routes to 127.0.0.1; start() is idempotent.)
|
||||
connect(daemonManager(), &DaemonManager::daemonStateChanged, this, [this](bool up){
|
||||
if (up && conf()->get(Config::runLocalNode).toBool())
|
||||
m_nodes->autoConnect(true);
|
||||
});
|
||||
connect(m_wallet, &Wallet::currentSubaddressAccountChanged, this, &MainWindow::updateTitle);
|
||||
connect(m_wallet, &Wallet::walletPassphraseNeeded, this, &MainWindow::onWalletPassphraseNeeded);
|
||||
|
||||
@@ -703,7 +711,7 @@ void MainWindow::onWebsocketStatusChanged(bool enabled) {
|
||||
}
|
||||
|
||||
void MainWindow::onProxySettingsChangedConnect() {
|
||||
m_nodes->connectToNode();
|
||||
m_nodes->reconnect(); // wowlet: clear blocklist + force-reconnect after a live Tor/proxy switch (test 2)
|
||||
this->onProxySettingsChanged();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user