Refine null checks and logging in WebSocket server message handling
- Introduce a local copy of user data before locking the mutex to ensure validity during message queuing. - Enhance null checks and logging to provide clearer insights when user data or message queue access fails. - Implement exception handling for message queue access to improve stability and error visibility.
This commit is contained in:
committed by
Torsten (PC)
parent
3a6d60e9a8
commit
5ce1cc4e6a
@@ -385,17 +385,34 @@ int WebSocketServer::wsCallback(struct lws *wsi,
|
||||
break;
|
||||
}
|
||||
|
||||
std::lock_guard<std::mutex> lock(ud->messageQueueMutex);
|
||||
std::cout << "Mutex gelockt, füge Nachricht zur Queue hinzu..." << std::endl;
|
||||
|
||||
// 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;
|
||||
// Speichere ud-Pointer vor dem Locken, um sicherzustellen, dass er gültig bleibt
|
||||
WebSocketUserData* udCopy = ud;
|
||||
if (!udCopy) {
|
||||
std::cerr << "[RECEIVE] udCopy ist nullptr" << std::endl;
|
||||
break;
|
||||
}
|
||||
|
||||
ud->messageQueue.push(messageToQueue);
|
||||
std::cout << "ud->messageQueue.size(): " << ud->messageQueue.size() << std::endl;
|
||||
std::lock_guard<std::mutex> lock(udCopy->messageQueueMutex);
|
||||
std::cout << "Mutex gelockt, füge Nachricht zur Queue hinzu..." << std::endl;
|
||||
|
||||
// Prüfe ob udCopy noch gültig ist, nachdem wir den Mutex gelockt haben
|
||||
if (!udCopy) {
|
||||
std::cerr << "[RECEIVE] udCopy ist nullptr nach Mutex-Lock" << std::endl;
|
||||
break;
|
||||
}
|
||||
|
||||
// Test-Zugriff auf messageQueue, um zu prüfen ob sie gültig ist
|
||||
try {
|
||||
volatile size_t testSize = udCopy->messageQueue.size();
|
||||
(void)testSize;
|
||||
std::cout << "messageQueue ist gültig, aktuelle Größe: " << udCopy->messageQueue.size() << std::endl;
|
||||
} catch (...) {
|
||||
std::cerr << "[RECEIVE] messageQueue ist ungültig (Exception beim Zugriff)" << std::endl;
|
||||
break;
|
||||
}
|
||||
|
||||
udCopy->messageQueue.push(messageToQueue);
|
||||
std::cout << "ud->messageQueue.size(): " << udCopy->messageQueue.size() << std::endl;
|
||||
} catch (const std::exception &e) {
|
||||
std::cerr << "[RECEIVE] Fehler beim Zugriff auf messageQueue: " << e.what() << std::endl;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user