summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Gorrod <alexander.gorrod@mongodb.com>2017-04-04 03:09:25 +1000
committerAlex Gorrod <alexander.gorrod@mongodb.com>2017-04-04 03:09:25 +1000
commitf83679a4936d720b03975e832ea49e316f435fac (patch)
treec3a5923f6c5300c51ba09d28cdc60e2b73ac2693
parent0da45dd289314cfa62f0099c82637486989c1bd8 (diff)
parente8efd76093d126a8d7b8e21c650123e96e9d6f13 (diff)
downloadmongo-f83679a4936d720b03975e832ea49e316f435fac.tar.gz
Merge branch 'develop' into mongodb-3.6
-rw-r--r--src/include/mutex.h28
-rw-r--r--src/include/mutex.i26
2 files changed, 19 insertions, 35 deletions
diff --git a/src/include/mutex.h b/src/include/mutex.h
index 06b8c4a3304..910eb7af5b9 100644
--- a/src/include/mutex.h
+++ b/src/include/mutex.h
@@ -62,31 +62,17 @@ union __wt_rwlock { /* Read/write lock */
#define SPINLOCK_PTHREAD_MUTEX 2
#define SPINLOCK_PTHREAD_MUTEX_ADAPTIVE 3
-#if SPINLOCK_TYPE == SPINLOCK_GCC
-
struct __wt_spinlock {
WT_CACHE_LINE_PAD_BEGIN
+#if SPINLOCK_TYPE == SPINLOCK_GCC
volatile int lock;
-
- /*
- * We track acquisitions and time spent waiting for some locks. For
- * performance reasons and to make it possible to write generic code
- * that tracks statistics for different locks, we store the offset
- * of the statistics fields to be updated during lock acquisition.
- */
- int16_t stat_count_off; /* acquisitions offset */
- int16_t stat_app_usecs_off; /* waiting application threads offset */
- int16_t stat_int_usecs_off; /* waiting server threads offset */
- WT_CACHE_LINE_PAD_END
-};
-
#elif SPINLOCK_TYPE == SPINLOCK_PTHREAD_MUTEX ||\
SPINLOCK_TYPE == SPINLOCK_PTHREAD_MUTEX_ADAPTIVE ||\
SPINLOCK_TYPE == SPINLOCK_MSVC
-
-struct __wt_spinlock {
- WT_CACHE_LINE_PAD_BEGIN
wt_mutex_t lock;
+#else
+#error Unknown spinlock type
+#endif
const char *name; /* Mutex name */
@@ -103,9 +89,3 @@ struct __wt_spinlock {
int8_t initialized; /* Lock initialized, for cleanup */
WT_CACHE_LINE_PAD_END
};
-
-#else
-
-#error Unknown spinlock type
-
-#endif
diff --git a/src/include/mutex.i b/src/include/mutex.i
index eb95d76a1a2..2d483972ed2 100644
--- a/src/include/mutex.i
+++ b/src/include/mutex.i
@@ -14,6 +14,18 @@
* of instructions.
*/
+/*
+ * __spin_init_internal --
+ * Initialize the WT portion of a spinlock.
+ */
+static inline void
+__spin_init_internal(WT_SPINLOCK *t, const char *name)
+{
+ t->name = name;
+ t->stat_count_off = t->stat_app_usecs_off = t->stat_int_usecs_off = -1;
+ t->initialized = 1;
+}
+
#if SPINLOCK_TYPE == SPINLOCK_GCC
/* Default to spinning 1000 times before yielding. */
@@ -29,12 +41,9 @@ static inline int
__wt_spin_init(WT_SESSION_IMPL *session, WT_SPINLOCK *t, const char *name)
{
WT_UNUSED(session);
- WT_UNUSED(name);
t->lock = 0;
- t->name = name;
- t->stat_count_off = t->stat_app_usecs_off = t->stat_int_usecs_off = -1;
- t->initialized = 1;
+ __spin_init_internal(t, name);
return (0);
}
@@ -112,10 +121,7 @@ __wt_spin_init(WT_SESSION_IMPL *session, WT_SPINLOCK *t, const char *name)
#else
WT_RET(pthread_mutex_init(&t->lock, NULL));
#endif
-
- t->name = name;
- t->stat_count_off = t->stat_app_usecs_off = t->stat_int_usecs_off = -1;
- t->initialized = 1;
+ __spin_init_internal(t, name);
WT_UNUSED(session);
return (0);
@@ -197,9 +203,7 @@ __wt_spin_init(WT_SESSION_IMPL *session, WT_SPINLOCK *t, const char *name)
return (__wt_map_windows_error(windows_error));
}
- t->name = name;
- t->stat_count_off = t->stat_app_usecs_off = t->stat_int_usecs_off = -1;
- t->initialized = 1;
+ __spin_init_internal(t, name);
return (0);
}