From 6a3aaef4868ed0812a569c1a048a6511dac80ba7 Mon Sep 17 00:00:00 2001 From: rubidium Date: Tue, 20 Jan 2009 03:44:43 +0000 Subject: (svn r15159) -Fix: move the UDP queries that resolve a hostname into threads so they don't freeze OpenTTD when for example the network connection got severed. Thanks to glx for writing the mutex implementation for Windows. --- src/thread_pthread.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/thread_pthread.cpp') diff --git a/src/thread_pthread.cpp b/src/thread_pthread.cpp index 87d524784..2ab3d43f7 100644 --- a/src/thread_pthread.cpp +++ b/src/thread_pthread.cpp @@ -83,3 +83,37 @@ private: if (thread != NULL) *thread = to; return true; } + +/** + * POSIX pthread version of ThreadMutex. + */ +class ThreadMutex_pthread : public ThreadMutex { +private: + pthread_mutex_t mutex; + +public: + ThreadMutex_pthread() + { + pthread_mutex_init(&this->mutex, NULL); + } + + /* virtual */ ~ThreadMutex_pthread() + { + pthread_mutex_destroy(&this->mutex); + } + + /* virtual */ void BeginCritical() + { + pthread_mutex_lock(&this->mutex); + } + + /* virtual */ void EndCritical() + { + pthread_mutex_unlock(&this->mutex); + } +}; + +/* static */ ThreadMutex *ThreadMutex::New() +{ + return new ThreadMutex_pthread(); +} -- cgit v1.2.3-54-g00ecf