Problem
The SandboxWatchdog sends a system.ping every 30 seconds and waits 5 seconds for a pong. If an extension (which usually runs on a single-threaded isolate) is busy serializing a massive JSON payload for a heavy SQL result, its Event Loop might be blocked for 6-8 seconds. The watchdog will interpret this as a deadlock and send a SIGKILL, crashing the extension prematurely.
Solution
Make the watchdog state-aware:
- Do not require pings/pongs when the plugin is explicitly in a
BUSY state (e.g. currently processing an active RPC request).
- Or, significantly increase the pong timeout threshold (e.g., 15-20 seconds) to account for heavy serialization blocking the Dart event loop.
Problem
The
SandboxWatchdogsends asystem.pingevery 30 seconds and waits 5 seconds for apong. If an extension (which usually runs on a single-threaded isolate) is busy serializing a massive JSON payload for a heavy SQL result, its Event Loop might be blocked for 6-8 seconds. The watchdog will interpret this as a deadlock and send aSIGKILL, crashing the extension prematurely.Solution
Make the watchdog state-aware:
BUSYstate (e.g. currently processing an active RPC request).