fix(console): release busy gate when the fast worker stops
When the daemon disconnects, teardown stops the fast RPC worker without draining its queued main-thread callbacks. The console busy gate was released inside that callback, so a command whose callback was discarded left the input disabled for the rest of the session. - The busy gate now drops from an RAII guard at the end of the worker job itself, so it is released however the job ends: success, error, or a worker torn down undrained. - The result is published to the console before the gate drops, so a freed-up console always has the output queued. - An unknown, non-std::exception failure is now caught and reported instead of escaping the job. User-visible: the Console input can no longer stay stuck disabled after a reconnect. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -943,7 +943,7 @@ void App::onDisconnected(const std::string& reason)
|
||||
// curl_easy_perform unblocks and stop()'s join() returns promptly (no UI freeze).
|
||||
if (fast_rpc_) fast_rpc_->requestAbort();
|
||||
if (fast_worker_) {
|
||||
fast_worker_->stop();
|
||||
fast_worker_->stop(); // undrained MainCbs are lost; console busy gate is released worker-side
|
||||
// Drop the stopped worker so onConnected recreates and starts a fresh one. Keeping a
|
||||
// stopped-but-present worker would defeat onConnected's `if (!fast_worker_)` guard, leaving
|
||||
// the fast lane dead for the rest of the session — which silently stalls the opid poll
|
||||
|
||||
Reference in New Issue
Block a user