Compares the user data for the key @key 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.
Compares the user data for the key @key 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.