mirror of
https://github.com/meshcore-dev/meshcore_py.git
synced 2026-06-11 11:56:18 +00:00
G1: F06 — wrap handle_rx dispatch in catch-all try/except
Why: handle_rx is invoked from a detached task in MessageReader, so any exception escaping its ~850-line if/elif dispatch is silently swallowed by asyncio as "Task exception was never retrieved." The only crash guard previously was a single try/except IndexError around the first byte read; everything past line 73 was unguarded. This commit adds an umbrella try: ... except Exception as e: around the entire dispatch body that logs the exception class, message, raw frame hex, and full traceback via logger.error. The umbrella neutralizes the crash surface of F10, F11, N07, N08, R01, NEW-B, and NEW-C, which the next commits will then fix individually now that they are observable. Refs: Forensics report finding F06 (umbrella crash protection)
This commit is contained in:
@@ -3,6 +3,7 @@ import json
|
|||||||
import struct
|
import struct
|
||||||
import time
|
import time
|
||||||
import io
|
import io
|
||||||
|
import traceback
|
||||||
from typing import Any, Dict
|
from typing import Any, Dict
|
||||||
from .events import Event, EventType, EventDispatcher, ErrorMessages
|
from .events import Event, EventType, EventDispatcher, ErrorMessages
|
||||||
from .meshcore_parser import MeshcorePacketParser
|
from .meshcore_parser import MeshcorePacketParser
|
||||||
@@ -69,6 +70,7 @@ class MessageReader:
|
|||||||
except IndexError as e:
|
except IndexError as e:
|
||||||
logger.warning(f"Received empty packet: {e}")
|
logger.warning(f"Received empty packet: {e}")
|
||||||
return
|
return
|
||||||
|
try:
|
||||||
logger.debug(f"Received data: {data.hex()}")
|
logger.debug(f"Received data: {data.hex()}")
|
||||||
|
|
||||||
# Handle command responses
|
# Handle command responses
|
||||||
@@ -919,3 +921,11 @@ class MessageReader:
|
|||||||
else:
|
else:
|
||||||
logger.debug(f"Unhandled data received {data}")
|
logger.debug(f"Unhandled data received {data}")
|
||||||
logger.debug(f"Unhandled packet type: {packet_type_value}")
|
logger.debug(f"Unhandled packet type: {packet_type_value}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(
|
||||||
|
"handle_rx parse error: %s: %s | raw=%s\n%s",
|
||||||
|
type(e).__name__,
|
||||||
|
e,
|
||||||
|
data.hex(),
|
||||||
|
traceback.format_exc(),
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user