From 47575fe357d8ccfe17bd97635352b4d39de2aef9 Mon Sep 17 00:00:00 2001 From: jmt Date: Thu, 15 Jan 2009 14:34:33 +0000 Subject: [PATCH] Commit Benoit Laniel's patch which converts more SimGear pieces to use OpenThreads primitives directly. --- simgear/scene/util/SGSceneFeatures.cxx | 9 +++---- simgear/scene/util/SGSceneFeatures.hxx | 4 ++++ simgear/threads/SGQueue.hxx | 33 +++++++++++++------------- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/simgear/scene/util/SGSceneFeatures.cxx b/simgear/scene/util/SGSceneFeatures.cxx index 71edb2eb..4367e453 100644 --- a/simgear/scene/util/SGSceneFeatures.cxx +++ b/simgear/scene/util/SGSceneFeatures.cxx @@ -31,9 +31,10 @@ #include #include +#include +#include + #include -#include -#include SGSceneFeatures::SGSceneFeatures() : _textureCompression(UseARBCompression), @@ -44,14 +45,14 @@ SGSceneFeatures::SGSceneFeatures() : { } -static SGMutex mutexSGSceneFeatures_instance; +static OpenThreads::Mutex mutexSGSceneFeatures_instance; SGSceneFeatures* SGSceneFeatures::instance() { static SGSharedPtr sceneFeatures; if (sceneFeatures) return sceneFeatures; - SGGuard guard(mutexSGSceneFeatures_instance); + OpenThreads::ScopedLock lock(mutexSGSceneFeatures_instance); if (sceneFeatures) return sceneFeatures; sceneFeatures = new SGSceneFeatures; diff --git a/simgear/scene/util/SGSceneFeatures.hxx b/simgear/scene/util/SGSceneFeatures.hxx index 458633ff..ced6c919 100644 --- a/simgear/scene/util/SGSceneFeatures.hxx +++ b/simgear/scene/util/SGSceneFeatures.hxx @@ -22,6 +22,8 @@ #ifndef SG_SCENE_FEATURES_HXX #define SG_SCENE_FEATURES_HXX +#include + #include namespace osg { class Texture; } @@ -94,6 +96,8 @@ private: bool _pointSpriteLights; bool _distanceAttenuationLights; int _textureFilter; + + static OpenThreads::Mutex _instanceMutex; }; #endif diff --git a/simgear/threads/SGQueue.hxx b/simgear/threads/SGQueue.hxx index 41bd3272..80877375 100644 --- a/simgear/threads/SGQueue.hxx +++ b/simgear/threads/SGQueue.hxx @@ -5,8 +5,9 @@ #include #include -#include "SGThread.hxx" -#include "SGGuard.hxx" +#include +#include +#include /** * SGQueue defines an interface for a FIFO. @@ -73,7 +74,7 @@ protected: /** * A simple thread safe queue. All access functions are guarded with a mutex. */ -template +template class SGLockedQueue : public SGQueue { public: @@ -94,7 +95,7 @@ public: * @return bool True if queue is empty, otherwisr false. */ virtual bool empty() { - SGGuard g(mutex); + OpenThreads::ScopedLock g(mutex); return this->fifo.empty(); } @@ -104,7 +105,7 @@ public: * @param T object to add. */ virtual void push( const T& item ) { - SGGuard g(mutex); + OpenThreads::ScopedLock g(mutex); this->fifo.push( item ); } @@ -114,7 +115,7 @@ public: * @return T next available object. */ virtual T front() { - SGGuard g(mutex); + OpenThreads::ScopedLock g(mutex); assert( ! this->fifo.empty() ); T item = this->fifo.front(); return item; @@ -126,7 +127,7 @@ public: * @return T next available object. */ virtual T pop() { - SGGuard g(mutex); + OpenThreads::ScopedLock g(mutex); //if (fifo.empty()) throw NoSuchElementException(); assert( ! this->fifo.empty() ); // if (fifo.empty()) @@ -145,7 +146,7 @@ public: * @return size_t size of queue. */ virtual size_t size() { - SGGuard g(mutex); + OpenThreads::ScopedLock g(mutex); return this->fifo.size(); } @@ -184,7 +185,7 @@ public: * */ virtual bool empty() { - SGGuard g(mutex); + OpenThreads::ScopedLock g(mutex); return this->fifo.empty(); } @@ -194,7 +195,7 @@ public: * @param T object to add. */ virtual void push( const T& item ) { - SGGuard g(mutex); + OpenThreads::ScopedLock g(mutex); this->fifo.push( item ); not_empty.signal(); } @@ -206,7 +207,7 @@ public: * @return T next available object. */ virtual T front() { - SGGuard g(mutex); + OpenThreads::ScopedLock g(mutex); assert(this->fifo.empty() != true); //if (fifo.empty()) throw ?? @@ -222,10 +223,10 @@ public: * @return T next available object. */ virtual T pop() { - SGGuard g(mutex); + OpenThreads::ScopedLock g(mutex); while (this->fifo.empty()) - not_empty.wait(mutex); + not_empty.wait(&mutex); assert(this->fifo.empty() != true); //if (fifo.empty()) throw ?? @@ -241,7 +242,7 @@ public: * @return size_t size of queue. */ virtual size_t size() { - SGGuard g(mutex); + OpenThreads::ScopedLock g(mutex); return this->fifo.size(); } @@ -250,12 +251,12 @@ private: /** * Mutex to serialise access. */ - SGMutex mutex; + OpenThreads::Mutex mutex; /** * Condition to signal when queue not empty. */ - SGPthreadCond not_empty; + OpenThreads::Condition not_empty; private: // Prevent copying.