diff --git a/src/websocket_server.cpp b/src/websocket_server.cpp index ca4dae9..02decdc 100644 --- a/src/websocket_server.cpp +++ b/src/websocket_server.cpp @@ -368,9 +368,33 @@ int WebSocketServer::wsCallback(struct lws *wsi, // Lege Nachricht in die Queue, ohne sofort lws_callback_on_writable aufzurufen try { 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 lock(ud->messageQueueMutex); 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; } catch (const std::exception &e) { std::cerr << "[RECEIVE] Fehler beim Zugriff auf messageQueue: " << e.what() << std::endl;