diff options
author | Alex Gorrod <alexander.gorrod@mongodb.com> | 2017-06-08 05:26:20 +1000 |
---|---|---|
committer | Alex Gorrod <alexander.gorrod@mongodb.com> | 2017-06-08 05:26:20 +1000 |
commit | 92f6668a768ebf294bd4f494c50f48459198e6a3 (patch) | |
tree | 5881f3355b62a6b0ac2b9ca2a49de5f81b11a980 /src/third_party/wiredtiger/src/include/mutex.h | |
parent | f2847a6ecf6bf0ca5b2a2b6e248466680d1290de (diff) | |
download | mongo-06d4ef37f9ea27c12cb7497a61442af8e7483352.tar.gz |
Import wiredtiger: 6da948fe3d4dd7262cbd0528d66867f276ce811d from branch mongodb-3.2r3.2.14-rc1r3.2.14
ref: f5c08e2b5f..6da948fe3d
for: 3.2.14
WT-3293 Make internal symbols externally visible
WT-3345 Improve rwlock scaling
WT-3354 Coverity issues 1375904-1375907
WT-3356 rwlock assertion failure on PPC
Diffstat (limited to 'src/third_party/wiredtiger/src/include/mutex.h')
-rw-r--r-- | src/third_party/wiredtiger/src/include/mutex.h | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/src/third_party/wiredtiger/src/include/mutex.h b/src/third_party/wiredtiger/src/include/mutex.h index 910eb7af5b9..36acea810d9 100644 --- a/src/third_party/wiredtiger/src/include/mutex.h +++ b/src/third_party/wiredtiger/src/include/mutex.h @@ -37,17 +37,21 @@ struct __wt_condvar { * Don't modify this structure without understanding the read/write locking * functions. */ -union __wt_rwlock { /* Read/write lock */ - uint64_t u; - struct { - uint32_t wr; /* Writers and readers */ - } i; - struct { - uint16_t writers; /* Now serving for writers */ - uint16_t readers; /* Now serving for readers */ - uint16_t next; /* Next available ticket number */ - uint16_t writers_active;/* Count of active writers */ - } s; +struct __wt_rwlock { /* Read/write lock */ + volatile union { + uint64_t v; /* Full 64-bit value */ + struct { + uint8_t current; /* Current ticket */ + uint8_t next; /* Next available ticket */ + uint8_t reader; /* Read queue ticket */ + uint8_t __notused; /* Padding */ + uint16_t readers_active;/* Count of active readers */ + uint16_t readers_queued;/* Count of queued readers */ + } s; + } u; + + WT_CONDVAR *cond_readers; /* Blocking readers */ + WT_CONDVAR *cond_writers; /* Blocking writers */ }; /* @@ -63,8 +67,8 @@ union __wt_rwlock { /* Read/write lock */ #define SPINLOCK_PTHREAD_MUTEX_ADAPTIVE 3 struct __wt_spinlock { - WT_CACHE_LINE_PAD_BEGIN #if SPINLOCK_TYPE == SPINLOCK_GCC + WT_CACHE_LINE_PAD_BEGIN volatile int lock; #elif SPINLOCK_TYPE == SPINLOCK_PTHREAD_MUTEX ||\ SPINLOCK_TYPE == SPINLOCK_PTHREAD_MUTEX_ADAPTIVE ||\ @@ -87,5 +91,8 @@ struct __wt_spinlock { int16_t stat_int_usecs_off; /* waiting server threads offset */ int8_t initialized; /* Lock initialized, for cleanup */ + +#if SPINLOCK_TYPE == SPINLOCK_GCC WT_CACHE_LINE_PAD_END +#endif }; |