/** * g_datalist_set_flags: * @datalist: pointer to the location that holds a list * @flags: the flags to turn on. The values of the flags are * restricted by %G_DATALIST_FLAGS_MASK (currently * 3; giving two possible boolean flags). * A value for @flags that doesn't fit within the mask is * an error. * * Turns on flag values for a data list. This function is used * to keep a small number of boolean flags in an object with * a data list without using any additional space. It is * not generally useful except in circumstances where space * is very tight. (It is used in the base #GObject type, for * example.) * * Since: 2.8 **/ void g_datalist_set_flags (GData **datalist, guint flags) { g_return_if_fail (datalist != NULL); g_return_if_fail ((flags & ~G_DATALIST_FLAGS_MASK) == 0); g_atomic_pointer_or (datalist, (gsize)flags); }
/** * g_atomic_pointer_or: * @atomic: a pointer to a #gpointer-sized value * @val: the value to 'or' * * Performs an atomic bitwise 'or' of the value of @atomic and @val, * storing the result back in @atomic. * * Think of this operation as an atomic version of * <literal>{ tmp = *atomic; *@atomic |= @val; return tmp; }</literal> * * This call acts as a full compiler and hardware memory barrier. * * Returns: the value of @atomic before the operation, unsigned * * Since: 2.30 **/ gsize (g_atomic_pointer_or) (volatile void *atomic, gsize val) { return g_atomic_pointer_or ((volatile gpointer *) atomic, val); }