From e4b8e1ea070926f088cca9d6502ace36b5fe782c Mon Sep 17 00:00:00 2001
From: Thomas Geymayer <tomgey@gmail.com>
Date: Sun, 20 Oct 2013 01:26:32 +0200
Subject: [PATCH] Trigger segfault/stacktrace to trace memory corruption.

Catch OSG error message if osg::Reference derived class
is deleted with non-zero reference count and trigger a
segfault to get a stack trace.
---
 src/Viewer/fg_os_osgviewer.cxx | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/Viewer/fg_os_osgviewer.cxx b/src/Viewer/fg_os_osgviewer.cxx
index ffe10c0e0..9a73847dc 100644
--- a/src/Viewer/fg_os_osgviewer.cxx
+++ b/src/Viewer/fg_os_osgviewer.cxx
@@ -190,6 +190,15 @@ public:
   virtual void notify(osg::NotifySeverity severity, const char *message)
   {
     SG_LOG(SG_GL, translateSeverity(severity), message);
+
+    // Detect whether a osg::Reference derived object is deleted with a non-zero
+    // reference count. In this case trigger a segfault to get a stack trace.
+    if( strstr(message, "the final reference count was") )
+    {
+
+      int* trigger_segfault = 0;
+      *trigger_segfault = 0;
+    }
   }
   
 private: