GObject.Object.replace_qdata

### Method

# GObject Objectreplace_qdata

since: 2.34

#### Declaration [src]

    gboolean
    g_object_replace_qdata (
      GObject* object,
      GQuark quark,
      gpointer oldval,
      gpointer newval,
      GDestroyNotify destroy,
      GDestroyNotify* old_destroy
    )

#### Description [src]

Compares the user data for the key `quark` on `object` with `oldval`, and if they are the same, replaces `oldval` with `newval`.

This is like a typical atomic compare-and-exchange operation, for user data on an object.

If the previous value was replaced then ownership of the old value (`oldval`) is passed to the caller, including the registered destroy notify for it (passed out in `old_destroy`). It’s up to the caller to free this as needed, which may or may not include using `old_destroy` as sometimes replacement should not destroy the object in the normal way.

Available since: 2.34

This method is not directly available to language bindings.

#### Parameters

`quark`

  Type: `GQuark`

  A `GQuark`, naming the user data pointer.

`oldval`

  Type: `gpointer`

  The old value to compare against.

  The argument can be `NULL`.
  The data is owned by the caller of the method.

`newval`

  Type: `gpointer`

  The new value.

  The argument can be `NULL`.
  The data is owned by the caller of the method.

`destroy`

  Type: `GDestroyNotify`

  A destroy notify for the new value.

  The argument can be `NULL`.

`old_destroy`

  Type: `GDestroyNotify`

  Destroy notify for the existing value.

  The argument will be set by the function.
  The argument can be `NULL`.
  The returned data is owned by the instance.

#### Return value

Type: `gboolean`

`TRUE` if the existing value for `quark` was replaced by `newval`, `FALSE` otherwise.