Function

GLibsteal_handle_id

unstable since: 2.84

Declaration [src]

static inline unsigned int
g_steal_handle_id (
  unsigned int* handle_pointer
)

Description [src]

Sets handle_pointer to 0, returning the value that was there before.

Conceptually, this transfers the ownership of the handle ID from the referenced variable to the ‘caller’ of the macro (ie: ‘steals’ the handle ID).

This can be very useful to make ownership transfer explicit, or to prevent a handle from being released multiple times. For example:

void
maybe_unsubscribe_signal (ContextStruct *data)
{
  if (some_complex_logic (data))
    {
      g_dbus_connection_signal_unsubscribe (data->connection,
                                            g_steal_handle_id (&data->subscription_id));
      // now data->subscription_id isn’t a dangling handle
    }
}

While g_clear_handle_id() can be used in many of the same situations as g_steal_handle_id(), this is one situation where it cannot be used, as there is no way to pass the GDBusConnection to a GClearHandleFunc.

Available since: 2.84

This function is not directly available to language bindings.

Parameters

handle_pointer

Type: unsigned int*

A pointer to a handle ID.

The argument will be modified by the function.

Return value

Type: unsigned int

No description available.