aboutsummaryrefslogtreecommitdiff
path: root/tools/debugserver/source/PThreadEvent.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/debugserver/source/PThreadEvent.h')
-rw-r--r--tools/debugserver/source/PThreadEvent.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/tools/debugserver/source/PThreadEvent.h b/tools/debugserver/source/PThreadEvent.h
new file mode 100644
index 000000000000..46c7cc09b121
--- /dev/null
+++ b/tools/debugserver/source/PThreadEvent.h
@@ -0,0 +1,59 @@
+//===-- PThreadEvent.h ------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Created by Greg Clayton on 6/16/07.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef __PThreadEvent_h__
+#define __PThreadEvent_h__
+#include "PThreadMutex.h"
+#include "PThreadCondition.h"
+#include <stdint.h>
+#include <time.h>
+
+class PThreadEvent
+{
+public:
+ PThreadEvent (uint32_t bits = 0, uint32_t validBits = 0);
+ ~PThreadEvent ();
+
+ uint32_t NewEventBit ();
+ void FreeEventBits (const uint32_t mask);
+
+ void ReplaceEventBits (const uint32_t bits);
+ uint32_t GetEventBits () const;
+ void SetEvents (const uint32_t mask);
+ void ResetEvents (const uint32_t mask);
+ // Wait for events to be set or reset. These functions take an optional
+ // timeout value. If timeout is NULL an infinite timeout will be used.
+ uint32_t WaitForSetEvents (const uint32_t mask, const struct timespec *timeout_abstime = NULL) const;
+ uint32_t WaitForEventsToReset(const uint32_t mask, const struct timespec *timeout_abstime = NULL) const;
+
+ uint32_t GetResetAckMask () const { return m_reset_ack_mask; }
+ uint32_t SetResetAckMask (uint32_t mask) { return m_reset_ack_mask = mask; }
+ uint32_t WaitForResetAck (const uint32_t mask, const struct timespec *timeout_abstime = NULL) const;
+protected:
+ //----------------------------------------------------------------------
+ // pthread condition and mutex variable to control access and allow
+ // blocking between the main thread and the spotlight index thread.
+ //----------------------------------------------------------------------
+ mutable PThreadMutex m_mutex;
+ mutable PThreadCondition m_set_condition;
+ mutable PThreadCondition m_reset_condition;
+ uint32_t m_bits;
+ uint32_t m_validBits;
+ uint32_t m_reset_ack_mask;
+private:
+ PThreadEvent(const PThreadEvent&); // Outlaw copy constructor
+ PThreadEvent& operator=(const PThreadEvent& rhs);
+
+};
+
+#endif // #ifndef __PThreadEvent_h__