From 9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Wed, 6 Jan 2016 20:12:03 +0000 Subject: Vendor import of lldb trunk r256945: https://llvm.org/svn/llvm-project/lldb/trunk@256945 --- .../lldbsuite/test/api/multithreaded/common.h | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 packages/Python/lldbsuite/test/api/multithreaded/common.h (limited to 'packages/Python/lldbsuite/test/api/multithreaded/common.h') diff --git a/packages/Python/lldbsuite/test/api/multithreaded/common.h b/packages/Python/lldbsuite/test/api/multithreaded/common.h new file mode 100644 index 000000000000..dad8bba07a3f --- /dev/null +++ b/packages/Python/lldbsuite/test/api/multithreaded/common.h @@ -0,0 +1,68 @@ +#ifndef LLDB_TEST_API_COMMON_H +#define LLDB_TEST_API_COMMON_H + +#include +#include +#include +#include +#include +#include +#include + +#include + +/// Simple exception class with a message +struct Exception : public std::exception +{ + std::string s; + Exception(std::string ss) : s(ss) {} + virtual ~Exception() throw () { } + const char* what() const throw() { return s.c_str(); } +}; + +// Synchronized data structure for listener to send events through +template +class multithreaded_queue { + std::condition_variable m_condition; + std::mutex m_mutex; + std::queue m_data; + bool m_notified; + +public: + + void push(T e) { + std::lock_guard lock(m_mutex); + m_data.push(e); + m_notified = true; + m_condition.notify_all(); + } + + T pop(int timeout_seconds, bool &success) { + int count = 0; + while (count < timeout_seconds) { + std::unique_lock lock(m_mutex); + if (!m_data.empty()) { + m_notified = false; + T ret = m_data.front(); + m_data.pop(); + success = true; + return ret; + } else if (!m_notified) + m_condition.wait_for(lock, std::chrono::seconds(1)); + count ++; + } + success = false; + return T(); + } +}; + +/// Allocates a char buffer with the current working directory +inline char* get_working_dir() { +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) + return getwd(0); +#else + return get_current_dir_name(); +#endif +} + +#endif // LLDB_TEST_API_COMMON_H -- cgit v1.2.3