From 4094c3f058ad866322d144b1809b32771fb9ba09 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 15 Nov 2004 11:57:41 +0000 Subject: [PATCH] Added osgDB::ReentrantMutex is prep for making osgDB::Registry single threaded. --- VisualStudio/osgDB/osgDB.dsp | 8 ++++++ include/osgDB/ReentrantMutex | 51 ++++++++++++++++++++++++++++++++++++ src/osgDB/GNUmakefile | 1 + 3 files changed, 60 insertions(+) create mode 100644 include/osgDB/ReentrantMutex diff --git a/VisualStudio/osgDB/osgDB.dsp b/VisualStudio/osgDB/osgDB.dsp index ecd221348..3e157765c 100755 --- a/VisualStudio/osgDB/osgDB.dsp +++ b/VisualStudio/osgDB/osgDB.dsp @@ -155,6 +155,10 @@ SOURCE=..\..\Src\osgDB\Registry.cpp # End Source File # Begin Source File +SOURCE=..\..\Src\osgDB\ReentrantMutex.cpp +# End Source File +# Begin Source File + SOURCE=..\..\src\osgDB\SharedStateManager.cpp # End Source File # Begin Source File @@ -239,6 +243,10 @@ SOURCE=..\..\Include\osgDB\Registry # End Source File # Begin Source File +SOURCE=..\..\Include\osgDB\ReentrantMutex +# End Source File +# Begin Source File + SOURCE=..\..\Include\osgDB\SharedStateManager # End Source File # Begin Source File diff --git a/include/osgDB/ReentrantMutex b/include/osgDB/ReentrantMutex new file mode 100644 index 000000000..43871a5b2 --- /dev/null +++ b/include/osgDB/ReentrantMutex @@ -0,0 +1,51 @@ +/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2003 Robert Osfield + * + * This library is open source and may be redistributed and/or modified under + * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or + * (at your option) any later version. The full license is in LICENSE file + * included with this distribution, and on the openscenegraph.org website. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * OpenSceneGraph Public License for more details. +*/ + +#ifndef OSGDB_REENTRANTMUTEX +#define OSGDB_REENTRANTMUTEX + +#include +#include + +#include + +namespace osgDB { + +class OSGDB_EXPORT ReentrantMutex : public OpenThreads::Mutex +{ + public: + + ReentrantMutex(); + + virtual ~ReentrantMutex(); + + virtual int lock(); + + virtual int unlock(); + + virtual int trylock(); + + private: + + ReentrantMutex(const ReentrantMutex &):Mutex() {} + + ReentrantMutex &operator=(const ReentrantMutex &) {return *(this);} + + OpenThreads::Thread* _threadHoldingMutex; + unsigned int _lockCount; + +}; + +} + +#endif diff --git a/src/osgDB/GNUmakefile b/src/osgDB/GNUmakefile index ec90a36db..b85c64e9a 100644 --- a/src/osgDB/GNUmakefile +++ b/src/osgDB/GNUmakefile @@ -9,6 +9,7 @@ CXXFILES =\ FileUtils.cpp\ ReadFile.cpp\ ReaderWriter.cpp\ + ReentrantMutex.cpp\ Registry.cpp\ Version.cpp\ WriteFile.cpp\