Index: /OpenSceneGraph/trunk/src/osg/Referenced.cpp
===================================================================
--- /OpenSceneGraph/trunk/src/osg/Referenced.cpp (revision 9549)
+++ /OpenSceneGraph/trunk/src/osg/Referenced.cpp (revision 9893)
@@ -34,13 +34,14 @@
 
 // specialized smart pointer, used to get round auto_ptr<>'s lack of the destructor reseting itself to 0.
-struct DeleteHandlerPointer
-{
-    DeleteHandlerPointer():
+template<typename T>
+struct ResetPointer
+{
+    ResetPointer():
         _ptr(0) {}
 
-    DeleteHandlerPointer(DeleteHandler* ptr):
+    ResetPointer(T* ptr):
         _ptr(ptr) {}
 
-    ~DeleteHandlerPointer()
+    ~ResetPointer()
     {
         delete _ptr;
@@ -48,5 +49,5 @@
     }
 
-    inline DeleteHandlerPointer& operator = (DeleteHandler* ptr)
+    inline ResetPointer& operator = (T* ptr)
     {
         if (_ptr==ptr) return *this;
@@ -56,5 +57,5 @@
     }
 
-    void reset(DeleteHandler* ptr)
+    void reset(T* ptr)
     {
         if (_ptr==ptr) return;
@@ -63,23 +64,26 @@
     }
 
-    inline DeleteHandler& operator*()  { return *_ptr; }
-
-    inline const DeleteHandler& operator*() const { return *_ptr; }
-
-    inline DeleteHandler* operator->() { return _ptr; }
-
-    inline const DeleteHandler* operator->() const   { return _ptr; }
-
-    DeleteHandler* get() { return _ptr; }
-
-    const DeleteHandler* get() const { return _ptr; }
-
-    DeleteHandler* _ptr;
+    inline T& operator*()  { return *_ptr; }
+
+    inline const T& operator*() const { return *_ptr; }
+
+    inline T* operator->() { return _ptr; }
+
+    inline const T* operator->() const   { return _ptr; }
+
+    T* get() { return _ptr; }
+
+    const T* get() const { return _ptr; }
+
+    T* _ptr;
 };
 
+typedef ResetPointer<DeleteHandler> DeleteHandlerPointer;
+typedef ResetPointer<OpenThreads::Mutex> GlobalMutexPointer;
+
 OpenThreads::Mutex* Referenced::getGlobalReferencedMutex()
 {
-    static OpenThreads::Mutex s_ReferencedGlobalMutext;
-    return &s_ReferencedGlobalMutext;
+    static GlobalMutexPointer s_ReferencedGlobalMutext = new OpenThreads::Mutex;
+    return s_ReferencedGlobalMutext.get();
 }
 
