zellij-org/zellij · error · anyhow::Error

found no sender to send plugin instruction to

Error message

found no sender to send plugin instruction to

What it means

Error "found no sender to send plugin instruction to" thrown in zellij-org/zellij.

Solutions

  1. The receiving end has shut down; ensure the component is alive before sending.
  2. Treat this as a shutdown race; retry after restart or report if reproducible.

When it happens

Trigger: Occurs at zellij-server/src/plugins/zellij_exports.rs:2495 when the operation fails: "found no sender to send plugin instruction to". Currently there is no defensive handling preventing or contextualizing this failure before it surfaces.

Common situations: Typically happens during shutdown or crash of a companion thread.


AI-assisted analysis of zellij-org/zellij@5cb5df5cce (2026-08-19). Data as JSON: /api/errors/541c10408424fa9b. Report an issue: GitHub.

Appendix: source

Thrown at zellij-server/src/plugins/zellij_exports.rs:2495

        })
        .non_fatal();
}

fn set_timeout(env: &PluginEnv, secs: f64) {
    let send_plugin_instructions = env.senders.to_plugin.clone();
    let update_target = Some(env.plugin_id);
    let client_id = env.client_id;
    let plugin_name = env.name();
    // Use tokio runtime for async I/O (timer operation)
    get_tokio_runtime().spawn(async move {
        let start_time = Instant::now();
        tokio::time::sleep(Duration::from_secs_f64(secs)).await;
        // FIXME: The way that elapsed time is being calculated here is not exact; it doesn't take into account the
        // time it takes an event to actually reach the plugin after it's sent to the `wasm` thread.
        let elapsed_time = Instant::now().duration_since(start_time).as_secs_f64();

        send_plugin_instructions
            .ok_or(anyhow!("found no sender to send plugin instruction to"))
            .and_then(|sender| {
                sender
                    .send(PluginInstruction::Update(vec![(
                        update_target,
                        Some(client_id),
                        Event::Timer(elapsed_time),
                    )]))
                    .to_anyhow()
            })
            .with_context(|| {
                format!(
                    "failed to set host timeout of {secs} s for plugin {}",
                    plugin_name
                )
            })
            .non_fatal();
    });
}

View on GitHub (pinned to 5cb5df5cce)