mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-05-07 08:38:02 +02:00
Add _dbus_atomic_get implemented in terms of inc, dec
Reviewed-by: Cosimo Alfarano <cosimo.alfarano@collabora.co.uk> Bug: https://bugs.freedesktop.org/show_bug.cgi?id=38005
This commit is contained in:
parent
c62b886119
commit
b997bf4ee2
2 changed files with 25 additions and 0 deletions
|
|
@ -1067,6 +1067,30 @@ _dbus_strerror_from_errno (void)
|
|||
return _dbus_strerror (errno);
|
||||
}
|
||||
|
||||
/**
|
||||
* Atomically get the value of an integer. It may change at any time
|
||||
* thereafter, so this is mostly only useful for assertions.
|
||||
*
|
||||
* This function temporarily increases the atomic integer, so only
|
||||
* use it in contexts where that would be OK (such as refcounts).
|
||||
*
|
||||
* @param atomic pointer to the integer to increment
|
||||
* @returns the value at this moment
|
||||
*/
|
||||
dbus_int32_t
|
||||
_dbus_atomic_get (DBusAtomic *atomic)
|
||||
{
|
||||
dbus_int32_t old_value;
|
||||
|
||||
/* On Windows we use InterlockedIncrement and InterlockedDecrement,
|
||||
* and there is no InterlockedGet, so we have to change the value.
|
||||
* Increasing it is less likely to have bad side-effects (for instance,
|
||||
* it's OK for refcounts). */
|
||||
old_value = _dbus_atomic_inc (atomic);
|
||||
_dbus_atomic_dec (atomic);
|
||||
return old_value;
|
||||
}
|
||||
|
||||
/** @} end of sysdeps */
|
||||
|
||||
/* tests in dbus-sysdeps-util.c */
|
||||
|
|
|
|||
|
|
@ -244,6 +244,7 @@ struct DBusAtomic
|
|||
|
||||
dbus_int32_t _dbus_atomic_inc (DBusAtomic *atomic);
|
||||
dbus_int32_t _dbus_atomic_dec (DBusAtomic *atomic);
|
||||
dbus_int32_t _dbus_atomic_get (DBusAtomic *atomic);
|
||||
|
||||
|
||||
/* AIX uses different values for poll */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue