Improve null checks and logging in WebSocket server message handling

- Add additional null checks for user data before and after locking the mutex to prevent potential crashes.
- Enhance logging to provide clearer insights when user data is invalid during message queuing.
- Ensure proper message copying to a local variable before accessing the message queue, improving thread safety and stability.
This commit is contained in:
Torsten Schulz (local)
2025-11-20 17:45:58 +01:00
committed by Torsten (PC)
parent d5a09f359d
commit 3a6d60e9a8

View File

@@ -368,9 +368,33 @@ int WebSocketServer::wsCallback(struct lws *wsi,
// Lege Nachricht in die Queue, ohne sofort lws_callback_on_writable aufzurufen // Lege Nachricht in die Queue, ohne sofort lws_callback_on_writable aufzurufen
try { try {
std::cout << "Versuche Mutex zu locken..." << std::endl; std::cout << "Versuche Mutex zu locken..." << std::endl;
// Prüfe ob ud noch gültig ist, bevor wir den Mutex locken
if (!ud) {
std::cerr << "[RECEIVE] ud ist nullptr vor Mutex-Lock" << std::endl;
break;
}
// Kopiere die Nachricht in eine lokale Variable, bevor wir den Mutex locken
std::string messageToQueue = errorResponse.dump();
std::cout << "Nachricht kopiert: " << messageToQueue.length() << " Bytes" << std::endl;
// Prüfe ob ud noch gültig ist, bevor wir den Mutex locken
if (!ud) {
std::cerr << "[RECEIVE] ud ist nullptr nach Kopieren der Nachricht" << std::endl;
break;
}
std::lock_guard<std::mutex> lock(ud->messageQueueMutex); std::lock_guard<std::mutex> lock(ud->messageQueueMutex);
std::cout << "Mutex gelockt, füge Nachricht zur Queue hinzu..." << std::endl; std::cout << "Mutex gelockt, füge Nachricht zur Queue hinzu..." << std::endl;
ud->messageQueue.push(errorResponse.dump());
// Prüfe ob ud noch gültig ist, nachdem wir den Mutex gelockt haben
if (!ud) {
std::cerr << "[RECEIVE] ud ist nullptr nach Mutex-Lock" << std::endl;
break;
}
ud->messageQueue.push(messageToQueue);
std::cout << "ud->messageQueue.size(): " << ud->messageQueue.size() << std::endl; std::cout << "ud->messageQueue.size(): " << ud->messageQueue.size() << std::endl;
} catch (const std::exception &e) { } catch (const std::exception &e) {
std::cerr << "[RECEIVE] Fehler beim Zugriff auf messageQueue: " << e.what() << std::endl; std::cerr << "[RECEIVE] Fehler beim Zugriff auf messageQueue: " << e.what() << std::endl;