base: Windows heim_base_once_t cleanup
heim_base_once_t can just be a LONG on Windows, the structure is not needed
This commit is contained in:
@@ -374,10 +374,10 @@ heim_base_once_f(heim_base_once_t *once, void *ctx, void (*func)(void *))
|
|||||||
* State 1 means that func() is executing.
|
* State 1 means that func() is executing.
|
||||||
* State 2 means that func() has completed execution.
|
* State 2 means that func() has completed execution.
|
||||||
*/
|
*/
|
||||||
if (InterlockedCompareExchange(&once->state, 1L, 0L) == 0L) {
|
if (InterlockedCompareExchange(once, 1L, 0L) == 0L) {
|
||||||
/* State is now 1 */
|
/* State is now 1 */
|
||||||
(*func)(ctx);
|
(*func)(ctx);
|
||||||
(void)InterlockedExchange(&once->state, 2L);
|
(void)InterlockedExchange(once, 2L);
|
||||||
/* State is now 2 */
|
/* State is now 2 */
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
@@ -385,7 +385,7 @@ heim_base_once_f(heim_base_once_t *once, void *ctx, void (*func)(void *))
|
|||||||
* the current state under a full memory barrier. As long
|
* the current state under a full memory barrier. As long
|
||||||
* as the current state is 1 continue to spin.
|
* as the current state is 1 continue to spin.
|
||||||
*/
|
*/
|
||||||
while (InterlockedCompareExchange(&once->state, 2L, 0L) == 1L)
|
while (InterlockedCompareExchange(once, 2L, 0L) == 1L)
|
||||||
SwitchToThread();
|
SwitchToThread();
|
||||||
}
|
}
|
||||||
#elif defined(HAVE_DISPATCH_DISPATCH_H)
|
#elif defined(HAVE_DISPATCH_DISPATCH_H)
|
||||||
|
@@ -56,13 +56,10 @@ typedef void * heim_object_t;
|
|||||||
typedef unsigned int heim_tid_t;
|
typedef unsigned int heim_tid_t;
|
||||||
typedef heim_object_t heim_bool_t;
|
typedef heim_object_t heim_bool_t;
|
||||||
typedef heim_object_t heim_null_t;
|
typedef heim_object_t heim_null_t;
|
||||||
#if defined(WIN32)
|
|
||||||
typedef struct {
|
|
||||||
LONG state;
|
|
||||||
} heim_base_once_t;
|
|
||||||
# define HEIM_BASE_ONCE_INIT {0L}
|
|
||||||
#else
|
|
||||||
# define HEIM_BASE_ONCE_INIT 0
|
# define HEIM_BASE_ONCE_INIT 0
|
||||||
|
#ifdef WIN32
|
||||||
|
typedef LONG heim_base_once_t;
|
||||||
|
#else
|
||||||
typedef long heim_base_once_t; /* XXX arch dependant */
|
typedef long heim_base_once_t; /* XXX arch dependant */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user