slint-ui/slint · error · napi::Error

Failed to create weak reference

Error message

Failed to create weak reference

What it means

Error "Failed to create weak reference" thrown in slint-ui/slint.

Source

Thrown at api/node/rust/weak_ref.rs:65

///
/// The reference doesn't prevent garbage collection.
/// If V8 collects the value,
/// [`get_unknown`](WeakValueRef::get_unknown) returns `None`.
pub struct WeakValueRef {
    raw_ref: napi::sys::napi_ref,
    raw_env: napi::sys::napi_env,
}

impl WeakValueRef {
    /// Create a weak reference to any JS value.
    pub fn new<'a, T: JsValue<'a>>(env: &Env, value: &T) -> Result<Self> {
        let raw_env = env.raw();
        let raw_val = value.raw();
        let mut raw_ref = std::ptr::null_mut();
        // Safety: raw_env and raw_val are valid handles from napi-rs.
        let status = unsafe { napi::sys::napi_create_reference(raw_env, raw_val, 0, &mut raw_ref) };
        if status != napi::sys::Status::napi_ok {
            return Err(napi::Error::new(
                napi::Status::from(status),
                "Failed to create weak reference",
            ));
        }
        Ok(Self { raw_ref, raw_env })
    }

    /// Get the value back,
    /// or `None` if it was garbage-collected.
    pub fn get_unknown(&self) -> Option<Unknown<'_>> {
        let mut value = std::ptr::null_mut();
        // Safety: raw_env and raw_ref are valid (created in new, deleted in drop).
        let status =
            unsafe { napi::sys::napi_get_reference_value(self.raw_env, self.raw_ref, &mut value) };
        if status != napi::sys::Status::napi_ok || value.is_null() {
            return None;
        }
        // Safety: value is a live JS handle from the reference.

View on GitHub (pinned to 3fd8f2ec03)

Solutions

  1. Ensure the referenced object is still alive when creating the weak reference.
  2. Avoid creating weak references to already-garbage-collected values.

When it happens

Trigger: Thrown at api/node/rust/weak_ref.rs:65 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of slint-ui/slint@3fd8f2ec03 (2026-08-19). Data as JSON: /api/errors/e9fcccb72233bd7f. Report an issue: GitHub.