A panic is a bug, and it should cost as little as it can. The server
already closed every session with a Cease and exited when a RIB or a
background task was lost. This fills in the rest:
- A panic inside a session is caught. The peer is sent Cease /
Administrative Reset, the session's routes are removed in the usual
order, and the dialer reconnects. Before, the peer was left with a TCP
connection closing under it and no reason.
- The tables every session shares (the session registry and the collision
table) no longer refuse to be locked after a panic. Lock poisoning would
have made each remaining session panic in turn the next time it touched
one, so one bug in one session took all of them down.
- The server's watcher reports a task that panicked with the panic's
message, and is now tested for both a panicking task and a stopped RIB.
- The daemon sends panics to its log, with their location, instead of
leaving them to the default report on stderr.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>