Changeset: 77acef3d57ed for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=77acef3d57ed
Modified Files:
gdk/gdk_system.h
Branch: Apr2019
Log Message:
Reduce code duplication.
diffs (99 lines):
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -310,17 +310,22 @@ typedef struct MT_Lock {
_DBG_LOCK_INIT(l); \
} while (0)
+static bool inline
+MT_lock_try(MT_Lock *l)
+{
+ if (l->lock == NULL) {
+ HANDLE p = CreateMutex(NULL, 0, NULL);
+ if (_InterlockedCompareExchangePointer(
+ &l->lock, p, NULL) != NULL)
+ CloseHandle(p);
+ }
+ return WaitForSingleObject(l->lock, 0) == WAIT_OBJECT_0;
+}
+
#define MT_lock_set(l) \
do { \
- if ((l)->lock == NULL) { \
- HANDLE _p = CreateMutex(NULL, 0, NULL); \
- if (_InterlockedCompareExchangePointer( \
- &(l)->lock, _p, NULL) != NULL) \
- CloseHandle(_p); \
- } \
- assert((l)->lock); \
_DBG_LOCK_COUNT_0(l); \
- if (WaitForSingleObject((l)->lock, 0) != WAIT_OBJECT_0) { \
+ if (!MT_lock_try(l)) { \
_DBG_LOCK_CONTENTION(l); \
MT_thread_setlockwait(l); \
while (WaitForSingleObject( \
@@ -339,18 +344,6 @@ typedef struct MT_Lock {
ReleaseMutex((l)->lock); \
} while (0)
-static bool inline
-MT_lock_try(MT_Lock *l)
-{
- if (l->lock == NULL) {
- HANDLE p = CreateMutex(NULL, 0, NULL);
- if (_InterlockedCompareExchangePointer(
- &l->lock, p, NULL) != NULL)
- CloseHandle(p);
- }
- return WaitForSingleObject(l->lock, 0) == WAIT_OBJECT_0;
-}
-
#define MT_lock_destroy(l) \
do { \
assert((l)->lock); \
@@ -388,10 +381,12 @@ typedef struct MT_Lock {
_DBG_LOCK_INIT(l); \
} while (0)
+#define MT_lock_try(l) (pthread_mutex_trylock(&(l)->lock) == 0)
+
#define MT_lock_set(l) \
do { \
_DBG_LOCK_COUNT_0(l); \
- if (pthread_mutex_trylock(&(l)->lock) != 0) { \
+ if (!MT_lock_try(l)) { \
_DBG_LOCK_CONTENTION(l); \
MT_thread_setlockwait(l); \
while (pthread_mutex_lock(&(l)->lock) != 0) \
@@ -408,8 +403,6 @@ typedef struct MT_Lock {
pthread_mutex_unlock(&(l)->lock); \
} while (0)
-#define MT_lock_try(l) (pthread_mutex_trylock(&(l)->lock) == 0)
-
#define MT_lock_destroy(l) \
do { \
_DBG_LOCK_DESTROY(l); \
@@ -441,10 +434,12 @@ typedef struct MT_Lock {
#define MT_LOCK_INITIALIZER(n) { .name = n, }
#endif
+#define MT_lock_try(l) (ATOMIC_TAS(&(l)->lock) == 0)
+
#define MT_lock_set(l) \
do { \
_DBG_LOCK_COUNT_0(l); \
- if (ATOMIC_TAS(&(l)->lock) != 0) { \
+ if (!MT_lock_try(l)) { \
/* we didn't get the lock */ \
int _spincnt = GDKnr_threads > 1 ? 0 : 1023; \
_DBG_LOCK_CONTENTION(l); \
@@ -461,8 +456,6 @@ typedef struct MT_Lock {
_DBG_LOCK_COUNT_2(l); \
} while (0)
-#define MT_lock_try(l) (ATOMIC_TAS(&(l)->lock) == 0)
-
#define MT_lock_init(l, n) \
do { \
ATOMIC_CLEAR(&(l)->lock); \
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list