base: use heim_base_atomic_load in heimqueue.h
Use heim_base_atomic_load() rather than heim_base_exchange_pointer() when iterating an atomic SLIST
This commit is contained in:
@@ -100,16 +100,25 @@ struct { \
|
|||||||
*/
|
*/
|
||||||
#include "heimbase.h"
|
#include "heimbase.h"
|
||||||
|
|
||||||
|
#define HEIM_SLIST_ATOMIC_HEAD(name, type) \
|
||||||
|
struct name { \
|
||||||
|
heim_base_atomic(struct type *) slh_first; /* first element */ \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define HEIM_SLIST_ATOMIC_ENTRY(type) \
|
||||||
|
struct { \
|
||||||
|
heim_base_atomic(struct type *) sle_next; /* next element */ \
|
||||||
|
}
|
||||||
|
|
||||||
#define HEIM_SLIST_ATOMIC_INSERT_HEAD(head, elm, field) do { \
|
#define HEIM_SLIST_ATOMIC_INSERT_HEAD(head, elm, field) do { \
|
||||||
(elm)->field.sle_next = \
|
(elm)->field.sle_next = \
|
||||||
heim_base_exchange_pointer(&(head)->slh_first, (elm)); \
|
heim_base_exchange_pointer(&(head)->slh_first, (elm)); \
|
||||||
} while (/*CONSTCOND*/0)
|
} while (/*CONSTCOND*/0)
|
||||||
|
|
||||||
#define HEIM_SLIST_ATOMIC_FOREACH(var, head, field) \
|
#define HEIM_SLIST_ATOMIC_FOREACH(var, head, field) \
|
||||||
for ((void)heim_base_exchange_pointer(&(var), (head)->slh_first); \
|
for ((var) = heim_base_atomic_load(&(head)->slh_first); \
|
||||||
(var) != NULL; \
|
(var) != NULL; \
|
||||||
(void)heim_base_exchange_pointer(&(var), (var)->field.sle_next))
|
(var) = heim_base_atomic_load(&(var)->field.sle_next))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tail queue definitions.
|
* Tail queue definitions.
|
||||||
*/
|
*/
|
||||||
|
@@ -60,11 +60,11 @@ _gss_free_oid(OM_uint32 *minor_status, gss_OID oid)
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct _gss_interned_oid {
|
struct _gss_interned_oid {
|
||||||
HEIM_SLIST_ENTRY(_gss_interned_oid) gio_link;
|
HEIM_SLIST_ATOMIC_ENTRY(_gss_interned_oid) gio_link;
|
||||||
gss_OID_desc gio_oid;
|
gss_OID_desc gio_oid;
|
||||||
};
|
};
|
||||||
|
|
||||||
static HEIM_SLIST_HEAD(_gss_interned_oid_list, _gss_interned_oid) interned_oids =
|
static HEIM_SLIST_ATOMIC_HEAD(_gss_interned_oid_list, _gss_interned_oid) interned_oids =
|
||||||
HEIM_SLIST_HEAD_INITIALIZER(interned_oids);
|
HEIM_SLIST_HEAD_INITIALIZER(interned_oids);
|
||||||
|
|
||||||
extern gss_OID _gss_ot_internal[];
|
extern gss_OID _gss_ot_internal[];
|
||||||
|
Reference in New Issue
Block a user