/** * g_datalist_unset_flags: * @datalist: pointer to the location that holds a list * @flags: the flags to turn off. 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 off flag values for a data list. See g_datalist_unset_flags() * * Since: 2.8 **/ void g_datalist_unset_flags (GData **datalist, guint flags) { g_return_if_fail (datalist != NULL); g_return_if_fail ((flags & ~G_DATALIST_FLAGS_MASK) == 0); g_atomic_pointer_and (datalist, ~(gsize)flags); }
/** * g_atomic_pointer_and: * @atomic: a pointer to a #gpointer-sized value * @val: the value to 'and' * * Performs an atomic bitwise 'and' 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_and) (volatile void *atomic, gsize val) { return g_atomic_pointer_and ((volatile gpointer *) atomic, val); }