aboutsummaryrefslogtreecommitdiff
path: root/vendor/libghostty-vt/src/apprt/gtk/weak_ref.zig
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-09-10 21:51:57 +0300
committerGitHub <noreply@github.com>2026-09-10 21:51:57 +0300
commit425c86179791cd32e2d4ce0ae7f269940b4b0663 (patch)
treee52c4383a6d69216cbe2a32638bf90841d7e2189 /vendor/libghostty-vt/src/apprt/gtk/weak_ref.zig
parent90e947a6e26e02f10ec7f1694c4eb5b78a86406b (diff)
chore: upgrade libghostty and preserve terminal behavior (#3906)
Diffstat (limited to 'vendor/libghostty-vt/src/apprt/gtk/weak_ref.zig')
-rw-r--r--vendor/libghostty-vt/src/apprt/gtk/weak_ref.zig17
1 files changed, 17 insertions, 0 deletions
diff --git a/vendor/libghostty-vt/src/apprt/gtk/weak_ref.zig b/vendor/libghostty-vt/src/apprt/gtk/weak_ref.zig
index f689e45f..73cc6e51 100644
--- a/vendor/libghostty-vt/src/apprt/gtk/weak_ref.zig
+++ b/vendor/libghostty-vt/src/apprt/gtk/weak_ref.zig
@@ -22,6 +22,23 @@ pub fn WeakRef(comptime T: type) type {
}
}
+ /// Release this weak reference.
+ ///
+ /// You MUST call this before the memory holding this struct is freed,
+ /// which in practice means from the owner's `dispose`. The target keeps
+ /// a pointer to this `GWeakRef` so that it can clear it when the target
+ /// is finalized; if this memory is gone by then, the target walks into
+ /// whatever now occupies it. That is an invalid read at best, and can
+ /// hang: the target takes a lock inside each registered weak ref, and
+ /// reused memory with the low bit set is a lock nothing will release.
+ ///
+ /// `set(null)` also unregisters and remains valid. This exists so the
+ /// requirement has a name at the use site rather than looking like an
+ /// ordinary assignment.
+ pub fn deinit(self: *Self) void {
+ self.ref.clear();
+ }
+
/// Get a strong reference to the object, or null if the object
/// has been finalized. This increases the reference count by one.
pub fn get(self: *Self) ?*T {