### Function

# GLib datalist_id_replace_data

since: 2.34

#### Declaration

    gboolean
    g_datalist_id_replace_data (
      GData** datalist,
      GQuark key_id,
      gpointer oldval,
      gpointer newval,
      GDestroyNotify destroy,
      GDestroyNotify* old_destroy
    )

#### Description

Compares the member that is associated with `key_id` in `datalist` to `oldval`, and if they are the same, replace `oldval` with `newval`.

This is like a typical atomic compare-and-exchange operation, for a member of `datalist`.

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`). Its up to the caller to free this as they wish, 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 function is not directly available to language bindings.

#### Parameters

`datalist`

  Type: `GData`

  Location of a datalist.

  The data is owned by the caller of the function.

`key_id`

  Type: `GQuark`

  The `GQuark` identifying a data element.

`oldval`

  Type: `gpointer`

  The old value to compare against.

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

`newval`

  Type: `gpointer`

  The new value to replace it with.

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

`destroy`

  Type: `GDestroyNotify`

  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 data is owned by the function.

#### Return value

Type: `gboolean`

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