Class WeakRef<T extends GObject>
- All Implemented Interfaces:
Proxy
GObject
.
A GWeakRef
can either be empty (i.e. point to null
), or point to an
object for as long as at least one "strong" reference to that object
exists. Before the object's GObjectClass
.dispose method is called,
every GWeakRef
associated with becomes empty (i.e. points to null
).
Like GValue
, GWeakRef
can be statically allocated, stack- or
heap-allocated, or embedded in larger structures.
Unlike g_object_weak_ref() and g_object_add_weak_pointer(), this weak reference is thread-safe: converting a weak pointer to a reference is atomic with respect to invalidation of weak pointers to destroyed objects.
If the object's GObjectClass
.dispose method results in additional
references to the object being held (‘re-referencing’), any GWeakRefs
taken
before it was disposed will continue to point to null
. Any GWeakRefs
taken
during disposal and after re-referencing, or after disposal has returned due
to the re-referencing, will continue to point to the object until its refcount
goes back to zero, at which point they too will be invalidated.
It is invalid to take a GWeakRef
on an object during GObjectClass
.dispose
without first having or creating a strong reference to the object.
-
Constructor Summary
ConstructorDescriptionWeakRef()
Allocate a new WeakRef.Allocate a new WeakRef.WeakRef
(MemorySegment address) Create a WeakRef proxy instance for the provided memory address. -
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
Frees resources associated with a non-statically-allocatedGWeakRef
.get()
If this WeakRef is not empty, atomically acquire a strong reference to the object it points to, and return that reference.static MemoryLayout
The memory layout of the native struct.void
Initialise a non-statically-allocatedGWeakRef
.readP()
Read the value of the fieldp
.void
Change the object to which this WeakRef points, or set it tonull
.void
Write a value in the fieldp
.Methods inherited from class io.github.jwharm.javagi.base.ProxyInstance
equals, handle, hashCode
-
Constructor Details
-
WeakRef
Create a WeakRef proxy instance for the provided memory address.- Parameters:
address
- the memory address of the native object
-
WeakRef
Allocate a new WeakRef.- Parameters:
arena
- to control the memory allocation scope
-
WeakRef
public WeakRef()Allocate a new WeakRef. The memory is allocated withArena.ofAuto()
.
-
-
Method Details
-
getMemoryLayout
The memory layout of the native struct.- Returns:
- the memory layout
-
readP
-
writeP
Write a value in the fieldp
.- Parameters:
p
- The new value for the fieldp
-
clear
public void clear()Frees resources associated with a non-statically-allocatedGWeakRef
. After this call, theGWeakRef
is left in an undefined state.You should only call this on a
GWeakRef
that previously had g_weak_ref_init() called on it. -
get
If this WeakRef is not empty, atomically acquire a strong reference to the object it points to, and return that reference.This function is needed because of the potential race between taking the pointer value and g_object_ref() on it, if the object was losing its last reference at the same time in a different thread.
The caller should release the resulting reference in the usual way, by using g_object_unref().
- Returns:
- the object pointed to
by this WeakRef, or
null
if it was empty
-
init
Initialise a non-statically-allocatedGWeakRef
.This function also calls g_weak_ref_set() with
object
on the freshly-initialised weak reference.This function should always be matched with a call to g_weak_ref_clear(). It is not necessary to use this function for a
GWeakRef
in static storage because it will already be properly initialised. Just use g_weak_ref_set() directly.- Parameters:
object
- aGObject
ornull
-
set
Change the object to which this WeakRef points, or set it tonull
.You must own a strong reference on
object
while calling this function.- Parameters:
object
- aGObject
ornull
-