summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/src/include/thread_group.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/third_party/wiredtiger/src/include/thread_group.h')
-rw-r--r--src/third_party/wiredtiger/src/include/thread_group.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/third_party/wiredtiger/src/include/thread_group.h b/src/third_party/wiredtiger/src/include/thread_group.h
new file mode 100644
index 00000000000..f946dcab144
--- /dev/null
+++ b/src/third_party/wiredtiger/src/include/thread_group.h
@@ -0,0 +1,61 @@
+/*-
+ * Copyright (c) 2014-2016 MongoDB, Inc.
+ * Copyright (c) 2008-2014 WiredTiger, Inc.
+ * All rights reserved.
+ *
+ * See the file LICENSE for redistribution information.
+ */
+
+/*
+ * WT_THREAD --
+ * Encapsulation of a thread that belongs to a thread group.
+ */
+struct __wt_thread {
+ WT_SESSION_IMPL *session;
+ u_int id;
+ wt_thread_t tid;
+#define WT_THREAD_RUN 0x01
+ uint32_t flags;
+
+ /* The runner function used by all threads. */
+ int (*run_func)(WT_SESSION_IMPL *session, WT_THREAD *context);
+};
+
+/*
+ * Flags for thread group functions.
+ */
+#define WT_THREAD_CAN_WAIT 0x01
+#define WT_THREAD_PANIC_FAIL 0x02
+
+/*
+ * WT_THREAD_GROUP --
+ * Encapsulation of a group of utility threads.
+ */
+struct __wt_thread_group {
+ uint32_t alloc; /* Size of allocated group */
+ uint32_t max; /* Max threads in group */
+ uint32_t min; /* Min threads in group */
+ uint32_t current_threads;/* Number of active threads */
+
+ const char *name; /* Name */
+
+ WT_RWLOCK *lock; /* Protects group changes */
+
+ /*
+ * Condition signalled when wanting to wake up threads that are
+ * part of the group - for example when shutting down. This condition
+ * can also be used by group owners to ensure state changes are noticed.
+ */
+ WT_CONDVAR *wait_cond;
+
+ /*
+ * The threads need to be held in an array of arrays, not an array of
+ * structures because the array is reallocated as it grows, which
+ * causes threads to loose track of their context is realloc moves the
+ * memory.
+ */
+ WT_THREAD **threads;
+
+ /* The runner function used by all threads. */
+ int (*run_func)(WT_SESSION_IMPL *session, WT_THREAD *context);
+};