Skip to content

servo plugin: request/response helpers can drop a reply and park the node's tick thread forever #663

Description

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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions