summaryrefslogtreecommitdiff
path: root/src/thread/thread_pthread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread/thread_pthread.cpp')
-rw-r--r--src/thread/thread_pthread.cpp81
1 files changed, 0 insertions, 81 deletions
diff --git a/src/thread/thread_pthread.cpp b/src/thread/thread_pthread.cpp
index afb259183..50fefb531 100644
--- a/src/thread/thread_pthread.cpp
+++ b/src/thread/thread_pthread.cpp
@@ -108,84 +108,3 @@ private:
if (thread != NULL) *thread = to;
return true;
}
-
-/**
- * POSIX pthread version of ThreadMutex.
- */
-class ThreadMutex_pthread : public ThreadMutex {
-private:
- pthread_mutex_t mutex; ///< The actual mutex.
- pthread_cond_t condition; ///< Data for conditional waiting.
- pthread_mutexattr_t attr; ///< Attributes set for the mutex.
- pthread_t owner; ///< Owning thread of the mutex.
- uint recursive_count; ///< Recursive lock count.
-
-public:
- ThreadMutex_pthread() : owner(0), recursive_count(0)
- {
- pthread_mutexattr_init(&this->attr);
- pthread_mutexattr_settype(&this->attr, PTHREAD_MUTEX_ERRORCHECK);
- pthread_mutex_init(&this->mutex, &this->attr);
- pthread_cond_init(&this->condition, NULL);
- }
-
- ~ThreadMutex_pthread() override
- {
- int err = pthread_cond_destroy(&this->condition);
- assert(err != EBUSY);
- err = pthread_mutex_destroy(&this->mutex);
- assert(err != EBUSY);
- }
-
- bool IsOwnedByCurrentThread() const
- {
- return this->owner == pthread_self();
- }
-
- void BeginCritical(bool allow_recursive = false) override
- {
- /* pthread mutex is not recursive by itself */
- if (this->IsOwnedByCurrentThread()) {
- if (!allow_recursive) NOT_REACHED();
- } else {
- int err = pthread_mutex_lock(&this->mutex);
- assert(err == 0);
- assert(this->recursive_count == 0);
- this->owner = pthread_self();
- }
- this->recursive_count++;
- }
-
- void EndCritical(bool allow_recursive = false) override
- {
- assert(this->IsOwnedByCurrentThread());
- if (!allow_recursive && this->recursive_count != 1) NOT_REACHED();
- this->recursive_count--;
- if (this->recursive_count != 0) return;
- this->owner = 0;
- int err = pthread_mutex_unlock(&this->mutex);
- assert(err == 0);
- }
-
- void WaitForSignal() override
- {
- uint old_recursive_count = this->recursive_count;
- this->recursive_count = 0;
- this->owner = 0;
- int err = pthread_cond_wait(&this->condition, &this->mutex);
- assert(err == 0);
- this->owner = pthread_self();
- this->recursive_count = old_recursive_count;
- }
-
- void SendSignal() override
- {
- int err = pthread_cond_signal(&this->condition);
- assert(err == 0);
- }
-};
-
-/* static */ ThreadMutex *ThreadMutex::New()
-{
- return new ThreadMutex_pthread();
-}