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: