mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-09-18 18:37:46 +02:00
The log manager had a single external-callback slot, but the WebSocket debugger registers one per *connection* - LogBroadcaster is a local in the per-connection handler. So with two clients attached (the bundled JS debugger in a browser and Tools/wsdbg, say) the second one to connect silently took the log stream away from the first, and then whichever disconnected first cleared the slot and stopped delivery to the other as well. A one-shot wsdbg command is enough to do it: connect, take the stream, exit, and the long-lived listener that was watching the log goes quiet with nothing to say why. Make it a list with add/remove by handle. The dispatch loop holds the lock across the callbacks so a listener can't be freed while one is running - which is what lets LogBroadcaster delete its listener straight after removing it. Enabling and disabling LogOutput::ExternalCallback belongs to the list now, and disabling only happens when the last callback goes away. libretro registers one of these too, and never removes it; it just moves to the new call. It can't actually collide with the debugger - the libretro build doesn't compile Core/Debugger/WebSocket at all - but there's no reason for it to keep using an API that only has room for one caller. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
37 lines
1020 B
C++
37 lines
1020 B
C++
// Copyright (c) 2018- PPSSPP Project.
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, version 2.0 or later versions.
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License 2.0 for more details.
|
|
|
|
// A copy of the GPL 2.0 should have been included with the program.
|
|
// If not, see http://www.gnu.org/licenses/
|
|
|
|
// Official git repository and contact information can be found at
|
|
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
|
|
|
|
#pragma once
|
|
|
|
namespace net {
|
|
class WebSocketServer;
|
|
}
|
|
|
|
class DebuggerLogListener;
|
|
|
|
struct LogBroadcaster {
|
|
public:
|
|
LogBroadcaster();
|
|
~LogBroadcaster();
|
|
|
|
void Broadcast(net::WebSocketServer *ws);
|
|
|
|
private:
|
|
DebuggerLogListener *listener_;
|
|
int callbackHandle_ = -1;
|
|
};
|