Split out from review of #661.
The shared Servo thread's reply helpers return without sending when the node has no entry in instances: send_fallback_frame (pre-existing) and send_status (added in #661), both in plugins/native/servo/src/servo_thread.rs. The callers (request_frame, request_status in servo_node.rs) block in recv() with no timeout, so any path where the instance is absent while the node is still alive parks the pipeline's tick thread permanently.
Today the only way an entry disappears is a failed send — i.e. the node's receiver is already gone — so it isn't reachable in practice. But the invariant is implicit and the number of round-trips depending on it grew with the Status item.
Fix options: use recv_timeout on the node side, or make the thread side structurally unable to skip a reply (e.g. have the work-item dispatch always send exactly one result).
Split out from review of #661.
The shared Servo thread's reply helpers return without sending when the node has no entry in
instances:send_fallback_frame(pre-existing) andsend_status(added in #661), both inplugins/native/servo/src/servo_thread.rs. The callers (request_frame,request_statusinservo_node.rs) block inrecv()with no timeout, so any path where the instance is absent while the node is still alive parks the pipeline's tick thread permanently.Today the only way an entry disappears is a failed send — i.e. the node's receiver is already gone — so it isn't reachable in practice. But the invariant is implicit and the number of round-trips depending on it grew with the
Statusitem.Fix options: use
recv_timeouton the node side, or make the thread side structurally unable to skip a reply (e.g. have the work-item dispatch always send exactly one result).