Hi,
I am currently testing this RC with openmw.
If i have the fps display or profiler open while exiting the application i get a crash on exit.
I am not sure if this is due to a bug in my build, a bug in openmw or a real issue with osg.
The issue seems to be related to the destruction of the default font, but i was not able to investigate further.
Attached is a Backtrace of the issue i am currently observing.
Greetings,
Fabian
*** Fatal Error ***
Invalid permissions for mapped object (signal 11)
Address: 0x5612597e50c0
* Backtrace
#2 0x00007f13a65b7f20 in <signal handler called> () at /lib/x86_64-linux-gnu/libc.so.6
#3 0x00005612597e50c0 in ()
#4 0x000056125898fdc4 in OpenThreads::ScopedPointerLock<OpenThreads::Mutex>::ScopedPointerLock(OpenThreads::Mutex*) () at ./openmw/extern-git/OpenSceneGraph/include/OpenThreads/ScopedLock:54
m = 0x5612597e5250
this = <synthetischer Zeiger>
lock = {m_lock = 0x5612597e5250}
pitr = <optimized out>
#5 0x000056125898fdc4 in osg::StateAttribute::removeParent(osg::StateSet*) (this=0x5612647f58e0, object=<optimized out>, object@entry=0x5612647d48f0) at ./openmw/extern-git/OpenSceneGraph/src/osg/StateAttribute.cpp:38
lock = {m_lock = 0x5612597e5250}
pitr = <optimized out>
#6 0x0000561258991d2c in osg::StateSet::clear() (this=this@entry=0x5612647d48f0) at ./openmw/extern-git/OpenSceneGraph/src/osg/StateSet.cpp:734
itr = {_M_node = 0x5612647f5a80}
#7 0x0000561258991f96 in __base_dtor (this=0x5612647d48f0) at ./openmw/extern-git/OpenSceneGraph/src/osg/StateSet.cpp:285
#8 0x0000561258992129 in __deleting_dtor (this=0x5612647d48f0) at ./openmw/extern-git/OpenSceneGraph/src/osg/StateSet.cpp:286
#9 0x0000561258bad988 in signalObserversAndDelete (signalDelete=true, doDelete=true, this=0x5612647d48f0) at /usr/include/c++/7/bits/stl_construct.h:107
newRef = <optimized out>
needDelete = <optimized out>
#10 0x0000561258bad988 in osg::Referenced::unref() const (this=0x5612647d48f0) at ./openmw/extern-git/OpenSceneGraph/include/osg/Referenced:201
newRef = <optimized out>
needDelete = <optimized out>
#11 0x0000561258bad988 in osg::ref_ptr<osg::StateSet>::~ref_ptr() () at ./openmw/extern-git/OpenSceneGraph/include/osg/ref_ptr:41
#12 0x0000561258bad988 in std::_Destroy<osg::ref_ptr<osg::StateSet> >(osg::ref_ptr<osg::StateSet>*) () at /usr/include/c++/7/bits/stl_construct.h:98
#13 0x0000561258bad988 in std::_Destroy_aux<false>::__destroy<osg::ref_ptr<osg::StateSet>*>(osg::ref_ptr<osg::StateSet>*, osg::ref_ptr<osg::StateSet>*) () at /usr/include/c++/7/bits/stl_construct.h:108
#14 0x0000561258bad988 in std::_Destroy<osg::ref_ptr<osg::StateSet>*>(osg::ref_ptr<osg::StateSet>*, osg::ref_ptr<osg::StateSet>*) () at /usr/include/c++/7/bits/stl_construct.h:137
#15 0x0000561258bad988 in std::_Destroy<osg::ref_ptr<osg::StateSet>*, osg::ref_ptr<osg::StateSet> >(osg::ref_ptr<osg::StateSet>*, osg::ref_ptr<osg::StateSet>*, std::allocator<osg::ref_ptr<osg::StateSet> >&) () at /usr/include/c++/7/bits/stl_construct.h:206
#16 0x0000561258bad988 in std::vector<osg::ref_ptr<osg::StateSet>, std::allocator<osg::ref_ptr<osg::StateSet> > >::~vector() [clone .lto_priv.5148] (this=0x561264714620) at /usr/include/c++/7/bits/stl_vector.h:434
#17 0x0000561258bad988 in __base_dtor (this=0x5612647145c0) at ./openmw/extern-git/OpenSceneGraph/src/osgText/Font.cpp:295
#18 0x0000561258bada13 in __base_dtor () at ./openmw/extern-git/OpenSceneGraph/src/osgText/DefaultFont.cpp:35
this = 0x5612647145c0
#19 0x0000561258bada13 in __deleting_dtor (this=0x5612647145c0) at ./openmw/extern-git/OpenSceneGraph/src/osgText/DefaultFont.cpp:37
#20 0x0000561258a1b6b4 in signalObserversAndDelete (signalDelete=true, doDelete=true, this=0x5612647145c0) at ./openmw/extern-git/OpenSceneGraph/src/osg/Referenced.cpp:281
newRef = <optimized out>
needDelete = <optimized out>
this = 0x561259805c38
__p = 0x56126472ce20
this = 0x561259805c38
__p = 0x56126472ce20
#21 0x0000561258a1b6b4 in osg::Referenced::unref() const (this=0x5612647145c0) at ./openmw/extern-git/OpenSceneGraph/include/osg/Referenced:201
newRef = <optimized out>
needDelete = <optimized out>
this = 0x561259805c38
__p = 0x56126472ce20
this = 0x561259805c38
__p = 0x56126472ce20
#22 0x0000561258a1b6b4 in osg::ref_ptr<osg::Object>::~ref_ptr() () at ./openmw/extern-git/OpenSceneGraph/include/osg/ref_ptr:41
this = 0x561259805c38
__p = 0x56126472ce20
this = 0x561259805c38
__p = 0x56126472ce20
#23 0x0000561258a1b6b4 in std::pair<osg::ref_ptr<osg::Object>, double>::~pair() () at /usr/include/c++/7/bits/stl_pair.h:208
this = 0x561259805c38
__p = 0x56126472ce20
this = 0x561259805c38
__p = 0x56126472ce20
#24 0x0000561258a1b6b4 in __base_dtor (this=0x56126472ce40) at /usr/include/c++/7/bits/stl_pair.h:208
this = 0x561259805c38
__p = 0x56126472ce20
this = 0x561259805c38
__p = 0x56126472ce20
#25 0x0000561258a1b6b4 in __gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> > > >::destroy<std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> > >(std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> >*) () at /usr/include/c++/7/ext/new_allocator.h:140
this = 0x561259805c38
__p = 0x56126472ce20
this = 0x561259805c38
__p = 0x56126472ce20
#26 0x0000561258a1b6b4 in std::allocator_traits<std::allocator<std::_Rb_tree_node<std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> > > > >::destroy<std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> > >(std::allocator<std::_Rb_tree_node<std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> > > >&, std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> >*) () at /usr/include/c++/7/bits/alloc_traits.h:487
this = 0x561259805c38
__p = 0x56126472ce20
this = 0x561259805c38
__p = 0x56126472ce20
#27 0x0000561258a1b6b4 in std::_Rb_tree<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> >, std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> >, std::_Select1st<std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> > >, osgDB::ObjectCache::ClassComp, std::allocator<std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> > > >::_M_destroy_node(std::_Rb_tree_node<std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> > >*) () at /usr/include/c++/7/bits/stl_tree.h:650
this = 0x561259805c38
__p = 0x56126472ce20
this = 0x561259805c38
__p = 0x56126472ce20
#28 0x0000561258a1b6b4 in std::_Rb_tree<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> >, std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> >, std::_Select1st<std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> > >, osgDB::ObjectCache::ClassComp, std::allocator<std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> > > >::_M_drop_node(std::_Rb_tree_node<std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> > >*) () at /usr/include/c++/7/bits/stl_tree.h:658
this = 0x561259805c38
__p = 0x56126472ce20
#29 0x0000561258a1b6b4 in _M_erase (this=this@entry=0x561259805c38, __x=0x56126472ce20) at /usr/include/c++/7/bits/stl_tree.h:1858
#30 0x0000561258a26262 in std::_Rb_tree<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> >, std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> >, std::_Select1st<std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> > >, osgDB::ObjectCache::ClassComp, std::allocator<std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> > > >::clear() () at /usr/include/c++/7/bits/stl_tree.h:1171
this = 0x561259805c38
this = 0x561259805c38
lock = {m_lock = @0x561259805c68}
#31 0x0000561258a26262 in std::map<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> >, std::pair<osg::ref_ptr<osg::Object>, double>, osgDB::ObjectCache::ClassComp, std::allocator<std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, osg::ref_ptr<osgDB::Options const> > const, std::pair<osg::ref_ptr<osg::Object>, double> > > >::clear() () at /usr/include/c++/7/bits/stl_map.h:1127
this = 0x561259805c38
lock = {m_lock = @0x561259805c68}
#32 0x0000561258a26262 in osgDB::ObjectCache::clear() (this=0x561259805c20) at ./openmw/extern-git/OpenSceneGraph/src/osgDB/ObjectCache.cpp:189
lock = {m_lock = @0x561259805c68}
#33 0x0000561258a5bfa3 in clearObjectCache () at ./openmw/extern-git/OpenSceneGraph/src/osgDB/Registry.cpp:1654
this = 0x5612598055e0
#34 0x0000561258a5bfa3 in osgDB::Registry::destruct() (this=0x5612598055e0) at ./openmw/extern-git/OpenSceneGraph/src/osgDB/Registry.cpp:507
#35 0x0000561258a5c10c in __base_dtor (this=0x5612598055e0) at ./openmw/extern-git/OpenSceneGraph/src/osgDB/Registry.cpp:486
#36 0x0000561258a5c499 in __deleting_dtor (this=0x5612598055e0) at ./openmw/extern-git/OpenSceneGraph/src/osgDB/Registry.cpp:487
#37 0x000056125863e367 in signalObserversAndDelete (signalDelete=true, doDelete=true, this=0x5612598055e0) at ./openmw/extern-git/OpenSceneGraph/src/osg/Referenced.cpp:281
newRef = 0
needDelete = true
#38 0x000056125863e367 in osg::Referenced::unref() const (this=0x5612598055e0) at ./openmw/extern-git/OpenSceneGraph/include/osg/Referenced:201
newRef = 0
needDelete = true
#39 0x00007f13a65bc041 in __run_exit_handlers (status=0, listp=0x7f13a6964718 <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true, run_dtors=run_dtors@entry=true) at exit.c:108
atfct = <optimized out>
onfct = <optimized out>
cxafct = <optimized out>
f = <optimized out>
new_exitfn_called = 2523
cur = 0x561259804ce0
#40 0x00007f13a65bc13a in __GI_exit (status=<optimized out>) at exit.c:139
#41 0x00007f13a659ab9e in __libc_start_main (main=0x56125860aae0 <main>, argc=2, argv=0x7ffd03613bb8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffd03613ba8) at ../csu/libc-start.c:344
result = <optimized out>
unwind_buf = {cancel_jmp_buf = {{jmp_buf = {0, -6745562391612795713, 94636792266176, 140724660157360, 0, 0, -1027869779201928001, -1125601318232042305}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x7f13a697a733 <_dl_init+259>, 0x7f13a6372a38}, data = {prev = 0x0, cleanup = 0x0, canceltype = -1500010701}}}
not_first_call = <optimized out>
#42 0x000056125862bdea in _start ()