summaryrefslogtreecommitdiff
path: root/innobase/include/sync0ipm.h
diff options
context:
space:
mode:
Diffstat (limited to 'innobase/include/sync0ipm.h')
-rw-r--r--innobase/include/sync0ipm.h113
1 files changed, 113 insertions, 0 deletions
diff --git a/innobase/include/sync0ipm.h b/innobase/include/sync0ipm.h
new file mode 100644
index 00000000000..3244a6d26de
--- /dev/null
+++ b/innobase/include/sync0ipm.h
@@ -0,0 +1,113 @@
+/******************************************************
+A fast mutex for interprocess synchronization.
+mutex_t can be used only within single process,
+but ip mutex also between processes.
+
+(c) 1995 Innobase Oy
+
+Created 9/30/1995 Heikki Tuuri
+*******************************************************/
+
+#ifndef sync0ipm_h
+#define sync0ipm_h
+
+#include "univ.i"
+#include "os0sync.h"
+#include "sync0sync.h"
+
+typedef struct ip_mutex_hdl_struct ip_mutex_hdl_t;
+typedef struct ip_mutex_struct ip_mutex_t;
+
+/* NOTE! The structure appears here only for the compiler to
+know its size. Do not use its fields directly!
+The structure used in a fast implementation of
+an interprocess mutex. */
+
+struct ip_mutex_struct {
+ mutex_t mutex; /* Ordinary mutex struct */
+ ulint waiters; /* This field is set to 1 if
+ there may be waiters */
+};
+
+/* The performance of the ip mutex in NT depends on how often
+a thread has to suspend itself waiting for the ip mutex
+to become free. The following variable counts system calls
+involved. */
+
+extern ulint ip_mutex_system_call_count;
+
+/**********************************************************************
+Creates, or rather, initializes
+an ip mutex object in a specified shared memory location (which must be
+appropriately aligned). The ip mutex is initialized in the reset state.
+NOTE! Explicit destroying of the ip mutex with ip_mutex_free
+is not recommended
+as the mutex resides in shared memory and we cannot make sure that
+no process is currently accessing it. Therefore just use
+ip_mutex_close to free the operating system event and mutex. */
+
+ulint
+ip_mutex_create(
+/*============*/
+ /* out: 0 if succeed */
+ ip_mutex_t* ip_mutex, /* in: pointer to shared memory */
+ char* name, /* in: name of the ip mutex */
+ ip_mutex_hdl_t** handle); /* out, own: handle to the
+ created mutex; handle exists
+ in the private address space of
+ the calling process */
+/**********************************************************************
+NOTE! Using this function is not recommended. See the note
+on ip_mutex_create. Destroys an ip mutex */
+
+void
+ip_mutex_free(
+/*==========*/
+ ip_mutex_hdl_t* handle); /* in, own: ip mutex handle */
+/**********************************************************************
+Opens an ip mutex object in a specified shared memory location.
+Explicit closing of the ip mutex with ip_mutex_close is necessary to
+free the operating system event and mutex created, and the handle. */
+
+ulint
+ip_mutex_open(
+/*==========*/
+ /* out: 0 if succeed */
+ ip_mutex_t* ip_mutex, /* in: pointer to shared memory */
+ char* name, /* in: name of the ip mutex */
+ ip_mutex_hdl_t** handle); /* out, own: handle to the
+ opened mutex */
+/**********************************************************************
+Closes an ip mutex. */
+
+void
+ip_mutex_close(
+/*===========*/
+ ip_mutex_hdl_t* handle); /* in, own: ip mutex handle */
+/******************************************************************
+Reserves an ip mutex. */
+UNIV_INLINE
+ulint
+ip_mutex_enter(
+/*===========*/
+ /* out: 0 if success,
+ SYNC_TIME_EXCEEDED if timeout */
+ ip_mutex_hdl_t* ip_mutex_hdl, /* in: pointer to ip mutex handle */
+ ulint time); /* in: maximum time to wait, in
+ microseconds, or
+ SYNC_INFINITE_TIME */
+/******************************************************************
+Releases an ip mutex. */
+UNIV_INLINE
+void
+ip_mutex_exit(
+/*==========*/
+ ip_mutex_hdl_t* ip_mutex_hdl); /* in: pointer to ip mutex handle */
+
+
+
+#ifndef UNIV_NONINL
+#include "sync0ipm.ic"
+#endif
+
+#endif