Skip to content

Reference counting types

Emmanuele Bassi requested to merge refcount-types into master

GLib uses reference counting semantics in basically all of its container data types, but every implementation has its own bespoke solution. Additionally, reference counting is pretty much the common memory management and garbage collection policy for the whole of the G* platform when it comes to complex data types.

GLib should offer reference counting types and functions to ensure that all implementations conform to similar semantics, especially with regards to saturation and potential integer overflow and wrapping.

In order to cover all possible bases, we have two distinct reference counting types and API:

  • grefcount, which provides a simple reference counter
  • gatomicrefcount, which provides a thread-safe reference counter with atomic semantics

Both reference counters share the C int space, with grefcount using the negative range, and gatomicrefcount using the positive range; this allows us to verify that we're not going to mix the two, and that we can use the atomic integer operations.

Both reference counters check for saturation – i.e. when the counter reaches the maximum allowed value.

Issues: #561 (closed), #315 (closed)

Edited by Emmanuele Bassi

Merge request reports