Race condition on initializing a vector of reserved node names

It's not reproducible in the normal conditions. I accidentally caught this when was running openmw under gdb. Adding a sleep to the right place reprocudes the race with ThreadSanitizer on ff90c9ce:

WARNING: ThreadSanitizer: data race (pid=29141)
  Read of size 1 at 0x7b7000050378 by thread T15:
    #0 std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__is_long() const /usr/bin/../include/c++/v1/string:1445:39 (openmw+0x15219ce)
    #1 std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__get_pointer() const /usr/bin/../include/c++/v1/string:1544:17 (openmw+0x15219ce)
    #2 std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::data() const /usr/bin/../include/c++/v1/string:1251:75 (openmw+0x15219ce)
    #3 std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::operator std::__1::basic_string_view<char, std::__1::char_traits<char> >() const /usr/bin/../include/c++/v1/string:879:65 (openmw+0x15219ce)
    #4 std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*> Misc::partialBinarySearch<std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>, std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) /home/elsid/dev/openmw/./components/misc/algorithm.hpp:47:56 (openmw+0x15219ce)
    #5 Resource::CanOptimizeCallback::isReservedName(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const /home/elsid/dev/openmw/components/resource/scenemanager.cpp:661:53 (openmw+0x15219ce)
    #6 Resource::CanOptimizeCallback::isOperationPermissibleForObjectImplementation(SceneUtil::Optimizer const*, osg::Node const*, unsigned int) const /home/elsid/dev/openmw/components/resource/scenemanager.cpp:681:17 (openmw+0x1521362)
    #7 SceneUtil::Optimizer::isOperationPermissibleForObject(osg::Node const*, unsigned int) const /home/elsid/dev/openmw/components/sceneutil/optimizer.hpp:216:66 (openmw+0x15b1c6c)
    #8 SceneUtil::BaseOptimizerVisitor::isOperationPermissibleForObject(osg::Node const*) const /home/elsid/dev/openmw/components/sceneutil/optimizer.hpp:466:37 (openmw+0x15b1c6c)
    #9 SceneUtil::Optimizer::MergeGeometryVisitor::mergeGroup(osg::Group&) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:1202:10 (openmw+0x15b1c6c)
    #10 SceneUtil::Optimizer::MergeGeometryVisitor::apply(osg::Group&) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:1170:9 (openmw+0x15b1aa5)
    #11 osg::Group::accept(osg::NodeVisitor&) /home/elsid/dev/OpenSceneGraph/build/clang/tsan/install/include/osg/Group:38:9 (openmw+0x8ab8c5)
    #12 osg::Group::traverse(osg::NodeVisitor&) /home/elsid/dev/OpenSceneGraph/src/osg/Group.cpp:63:17 (libosg.so.162+0x1ee6d2)
    #13 osg::NodeVisitor::traverse(osg::Node&) /home/elsid/dev/OpenSceneGraph/build/clang/tsan/install/include/osg/NodeVisitor (openmw+0x15b1adb)
    #14 SceneUtil::Optimizer::MergeGeometryVisitor::apply(osg::Group&) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:1172:5 (openmw+0x15b1adb)
    #15 osg::Group::accept(osg::NodeVisitor&) /home/elsid/dev/OpenSceneGraph/build/clang/tsan/install/include/osg/Group:38:9 (openmw+0x8ab8c5)
    #16 SceneUtil::Optimizer::optimize(osg::Node*, unsigned int) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:119:15 (openmw+0x15aa043)
    #17 Resource::SceneManager::getTemplate(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) /home/elsid/dev/openmw/components/resource/scenemanager.cpp:794:27 (openmw+0x1518649)
    #18 MWRender::PreloadCommonAssetsWorkItem::doWork() /home/elsid/dev/openmw/apps/openmw/mwrender/renderingmanager.cpp:352:57 (openmw+0x818e2d)
    #19 SceneUtil::WorkThread::run() /home/elsid/dev/openmw/components/sceneutil/workqueue.cpp:134:15 (openmw+0x159f306)
    #20 SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1::operator()() const /home/elsid/dev/openmw/components/sceneutil/workqueue.cpp:117:24 (openmw+0x159f4a0)
    #21 decltype(static_cast<SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1>(fp)()) std::__1::__invoke<SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1>(SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1&&) /usr/bin/../include/c++/v1/type_traits:3640:23 (openmw+0x159f4a0)
    #22 void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1>&, std::__1::__tuple_indices<>) /usr/bin/../include/c++/v1/thread:282:5 (openmw+0x159f4a0)
    #23 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1> >(void*) /usr/bin/../include/c++/v1/thread:293:5 (openmw+0x159f4a0)

  Previous write of size 8 at 0x7b7000050378 by main thread:
    #0 memcpy <null> (openmw+0x781d16)
    #1 std::__1::enable_if<(is_move_constructible<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__rep>::value) && (is_move_assignable<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__rep>::value), void>::type std::__1::swap<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__rep>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__rep&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__rep&) /usr/bin/../include/c++/v1/__utility/swap.h:37:7 (openmw+0x1522203)
    #2 std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::swap(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) /usr/bin/../include/c++/v1/string:3452:5 (openmw+0x1522203)
    #3 void std::__1::swap<char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) /usr/bin/../include/c++/v1/string:4313:11 (openmw+0x1522203)
    #4 void std::__1::__introsort<bool (*&)(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::basic_string_view<char, std::__1::char_traits<char> >), std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, bool (*&)(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::basic_string_view<char, std::__1::char_traits<char> >), std::__1::iterator_traits<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>::difference_type) /usr/bin/../include/c++/v1/__algorithm/sort.h:418:17 (openmw+0x1522203)
    #5 void std::__1::__introsort<bool (*&)(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::basic_string_view<char, std::__1::char_traits<char> >), std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, bool (*&)(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::basic_string_view<char, std::__1::char_traits<char> >), std::__1::iterator_traits<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>::difference_type) /usr/bin/../include/c++/v1/__algorithm/sort.h:462:11 (openmw+0x15227d8)
    #6 void std::__1::__sort<bool (*&)(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::basic_string_view<char, std::__1::char_traits<char> >), std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*, bool (*&)(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::basic_string_view<char, std::__1::char_traits<char> >)) /usr/bin/../include/c++/v1/__algorithm/sort.h:482:3 (openmw+0x15218f5)
    #7 void std::__1::sort<std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>, bool (*)(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::basic_string_view<char, std::__1::char_traits<char> >)>(std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>, std::__1::__wrap_iter<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*>, bool (*)(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::basic_string_view<char, std::__1::char_traits<char> >)) /usr/bin/../include/c++/v1/__algorithm/sort.h:542:5 (openmw+0x15218f5)
    #8 Resource::CanOptimizeCallback::isReservedName(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const /home/elsid/dev/openmw/components/resource/scenemanager.cpp:658:17 (openmw+0x15218f5)
    #9 Resource::CanOptimizeCallback::isOperationPermissibleForObjectImplementation(SceneUtil::Optimizer const*, osg::Node const*, unsigned int) const /home/elsid/dev/openmw/components/resource/scenemanager.cpp:681:17 (openmw+0x1521362)
    #10 SceneUtil::Optimizer::isOperationPermissibleForObject(osg::Node const*, unsigned int) const /home/elsid/dev/openmw/components/sceneutil/optimizer.hpp:216:66 (openmw+0x15bcf55)
    #11 SceneUtil::BaseOptimizerVisitor::isOperationPermissibleForObject(osg::Node const*) const /home/elsid/dev/openmw/components/sceneutil/optimizer.hpp:466:37 (openmw+0x15bcf55)
    #12 SceneUtil::CollectLowestTransformsVisitor::isOperationPermissibleForObject(osg::Node const*) const /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:271:42 (openmw+0x15bcf55)
    #13 void SceneUtil::CollectLowestTransformsVisitor::registerWithCurrentObjects<osg::MatrixTransform>(osg::MatrixTransform*) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:348:62 (openmw+0x15bcf55)
    #14 SceneUtil::CollectLowestTransformsVisitor::apply(osg::MatrixTransform&) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:201:13 (openmw+0x15bbd80)
    #15 NifOsg::MatrixTransform::accept(osg::NodeVisitor&) /home/elsid/dev/openmw/./components/nifosg/matrixtransform.hpp:18:9 (openmw+0x15a9075)
    #16 SceneUtil::CollectLowestTransformsVisitor::collectDataFor(osg::Drawable*) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:240:25 (openmw+0x15b8de3)
    #17 SceneUtil::Optimizer::FlattenStaticTransformsVisitor::removeTransforms(osg::Node*) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:700:14 (openmw+0x15aaa8d)
    #18 SceneUtil::Optimizer::optimize(osg::Node*, unsigned int) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:76:27 (openmw+0x15a9817)
    #19 Resource::SceneManager::getTemplate(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) /home/elsid/dev/openmw/components/resource/scenemanager.cpp:794:27 (openmw+0x1518649)
    #20 MWRender::ActorAnimation::attach(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::basic_string_view<char, std::__1::char_traits<char> >, bool) /home/elsid/dev/openmw/apps/openmw/mwrender/actoranimation.cpp:85:86 (openmw+0x8b5966)
    #21 MWRender::NpcAnimation::insertBoundedPart(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::basic_string_view<char, std::__1::char_traits<char> >, bool, osg::Vec4f*, bool) /home/elsid/dev/openmw/apps/openmw/mwrender/npcanimation.cpp:712:40 (openmw+0x8632ed)
    #22 MWRender::NpcAnimation::addOrReplaceIndividualPart(ESM::PartReferenceType, int, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, osg::Vec4f*, bool) /home/elsid/dev/openmw/apps/openmw/mwrender/npcanimation.cpp:817:30 (openmw+0x86165d)
    #23 MWRender::NpcAnimation::addPartGroup(int, int, std::__1::vector<ESM::PartReference, std::__1::allocator<ESM::PartReference> > const&, bool, osg::Vec4f*) /home/elsid/dev/openmw/apps/openmw/mwrender/npcanimation.cpp:932:13 (openmw+0x860f73)
    #24 MWRender::NpcAnimation::updateParts() /home/elsid/dev/openmw/apps/openmw/mwrender/npcanimation.cpp:630:13 (openmw+0x85f9df)
    #25 MWRender::NpcAnimation::updateNpcBase() /home/elsid/dev/openmw/apps/openmw/mwrender/npcanimation.cpp:519:5 (openmw+0x85df42)
    #26 MWRender::NpcAnimation::NpcAnimation(MWWorld::Ptr const&, osg::ref_ptr<osg::Group>, Resource::ResourceSystem*, bool, MWRender::NpcAnimation::ViewMode, float) /home/elsid/dev/openmw/apps/openmw/mwrender/npcanimation.cpp:296:5 (openmw+0x85cf8f)
    #27 MWRender::CharacterPreview::rebuild() /home/elsid/dev/openmw/apps/openmw/mwrender/characterpreview.cpp:376:26 (openmw+0x88f0d4)
    #28 MWGui::InventoryWindow::InventoryWindow(MWGui::DragAndDrop*, osg::Group*, Resource::ResourceSystem*) /home/elsid/dev/openmw/apps/openmw/mwgui/inventorywindow.cpp:72:19 (openmw+0x9dc2f0)
    #29 std::__1::__unique_if<MWGui::InventoryWindow>::__unique_single std::__1::make_unique<MWGui::InventoryWindow, MWGui::DragAndDrop*, osg::Group*, Resource::ResourceSystem*&>(MWGui::DragAndDrop*&&, osg::Group*&&, Resource::ResourceSystem*&) /usr/bin/../include/c++/v1/__memory/unique_ptr.h:725:32 (openmw+0x952d97)
    #30 MWGui::WindowManager::initUI() /home/elsid/dev/openmw/apps/openmw/mwgui/windowmanagerimp.cpp:312:32 (openmw+0x952d97)
    #31 OMW::Engine::prepareEngine() /home/elsid/dev/openmw/apps/openmw/engine.cpp:873:21 (openmw+0x1360828)
    #32 OMW::Engine::go() /home/elsid/dev/openmw/apps/openmw/engine.cpp:1042:5 (openmw+0x1361abd)
    #33 runApplication(int, char**) /home/elsid/dev/openmw/apps/openmw/main.cpp:228:17 (openmw+0x1356e0e)
    #34 wrapApplication(int (*)(int, char**), int, char**, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) /home/elsid/dev/openmw/components/debug/debugging.cpp:330:19 (openmw+0x1757a91)
    #35 main /home/elsid/dev/openmw/apps/openmw/main.cpp:240:12 (openmw+0x1356f0a)

  As if synchronized via sleep:
    #0 nanosleep <null> (openmw+0x7b6528)
    #1 std::__1::this_thread::sleep_for(std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000000000l> > const&) <null> (libc++.so.1+0x5fd28)
    #2 Resource::CanOptimizeCallback::isOperationPermissibleForObjectImplementation(SceneUtil::Optimizer const*, osg::Node const*, unsigned int) const /home/elsid/dev/openmw/components/resource/scenemanager.cpp:681:17 (openmw+0x1521362)
    #3 SceneUtil::Optimizer::isOperationPermissibleForObject(osg::Node const*, unsigned int) const /home/elsid/dev/openmw/components/sceneutil/optimizer.hpp:216:66 (openmw+0x15bcf55)
    #4 SceneUtil::BaseOptimizerVisitor::isOperationPermissibleForObject(osg::Node const*) const /home/elsid/dev/openmw/components/sceneutil/optimizer.hpp:466:37 (openmw+0x15bcf55)
    #5 SceneUtil::CollectLowestTransformsVisitor::isOperationPermissibleForObject(osg::Node const*) const /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:271:42 (openmw+0x15bcf55)
    #6 void SceneUtil::CollectLowestTransformsVisitor::registerWithCurrentObjects<osg::MatrixTransform>(osg::MatrixTransform*) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:348:62 (openmw+0x15bcf55)
    #7 SceneUtil::CollectLowestTransformsVisitor::apply(osg::MatrixTransform&) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:201:13 (openmw+0x15bbd80)
    #8 NifOsg::MatrixTransform::accept(osg::NodeVisitor&) /home/elsid/dev/openmw/./components/nifosg/matrixtransform.hpp:18:9 (openmw+0x15a9075)
    #9 SceneUtil::CollectLowestTransformsVisitor::collectDataFor(osg::Drawable*) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:240:25 (openmw+0x15b8de3)
    #10 SceneUtil::Optimizer::FlattenStaticTransformsVisitor::removeTransforms(osg::Node*) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:700:14 (openmw+0x15aaa8d)
    #11 SceneUtil::Optimizer::optimize(osg::Node*, unsigned int) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:76:27 (openmw+0x15a9817)
    #12 Resource::SceneManager::getTemplate(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) /home/elsid/dev/openmw/components/resource/scenemanager.cpp:794:27 (openmw+0x1518649)
    #13 MWRender::PreloadCommonAssetsWorkItem::doWork() /home/elsid/dev/openmw/apps/openmw/mwrender/renderingmanager.cpp:352:57 (openmw+0x818e2d)
    #14 SceneUtil::WorkThread::run() /home/elsid/dev/openmw/components/sceneutil/workqueue.cpp:134:15 (openmw+0x159f306)
    #15 SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1::operator()() const /home/elsid/dev/openmw/components/sceneutil/workqueue.cpp:117:24 (openmw+0x159f4a0)
    #16 decltype(static_cast<SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1>(fp)()) std::__1::__invoke<SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1>(SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1&&) /usr/bin/../include/c++/v1/type_traits:3640:23 (openmw+0x159f4a0)
    #17 void std::__1::__thread_execute<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1>(std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1>&, std::__1::__tuple_indices<>) /usr/bin/../include/c++/v1/thread:282:5 (openmw+0x159f4a0)
    #18 void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1> >(void*) /usr/bin/../include/c++/v1/thread:293:5 (openmw+0x159f4a0)

  Location is heap block of size 1968 at 0x7b7000050000 allocated by main thread:
    #0 operator new(unsigned long) <null> (openmw+0x801ef9)
    #1 void* std::__1::__libcpp_operator_new<unsigned long>(unsigned long) /usr/bin/../include/c++/v1/new:245:10 (openmw+0x8b15ea)
    #2 std::__1::__libcpp_allocate(unsigned long, unsigned long) /usr/bin/../include/c++/v1/new:271:10 (openmw+0x8b15ea)
    #3 std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::allocate(unsigned long) /usr/bin/../include/c++/v1/__memory/allocator.h:105:38 (openmw+0x8b15ea)
    #4 std::__1::allocator_traits<std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::allocate(std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&, unsigned long) /usr/bin/../include/c++/v1/__memory/allocator_traits.h:262:20 (openmw+0x8b15ea)
    #5 std::__1::__split_buffer<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&>::__split_buffer(unsigned long, unsigned long, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >&) /usr/bin/../include/c++/v1/__split_buffer:306:29 (openmw+0x8b15ea)
    #6 void std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::__push_back_slow_path<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&) /usr/bin/../include/c++/v1/vector:1517:49 (openmw+0x8b15ea)
    #7 std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >::push_back(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&) /usr/bin/../include/c++/v1/vector:1549:9 (openmw+0x152182a)
    #8 Resource::CanOptimizeCallback::isReservedName(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const /home/elsid/dev/openmw/components/resource/scenemanager.cpp:656:35 (openmw+0x152182a)
    #9 Resource::CanOptimizeCallback::isOperationPermissibleForObjectImplementation(SceneUtil::Optimizer const*, osg::Node const*, unsigned int) const /home/elsid/dev/openmw/components/resource/scenemanager.cpp:681:17 (openmw+0x1521362)
    #10 SceneUtil::Optimizer::isOperationPermissibleForObject(osg::Node const*, unsigned int) const /home/elsid/dev/openmw/components/sceneutil/optimizer.hpp:216:66 (openmw+0x15bcf55)
    #11 SceneUtil::BaseOptimizerVisitor::isOperationPermissibleForObject(osg::Node const*) const /home/elsid/dev/openmw/components/sceneutil/optimizer.hpp:466:37 (openmw+0x15bcf55)
    #12 SceneUtil::CollectLowestTransformsVisitor::isOperationPermissibleForObject(osg::Node const*) const /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:271:42 (openmw+0x15bcf55)
    #13 void SceneUtil::CollectLowestTransformsVisitor::registerWithCurrentObjects<osg::MatrixTransform>(osg::MatrixTransform*) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:348:62 (openmw+0x15bcf55)
    #14 SceneUtil::CollectLowestTransformsVisitor::apply(osg::MatrixTransform&) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:201:13 (openmw+0x15bbd80)
    #15 NifOsg::MatrixTransform::accept(osg::NodeVisitor&) /home/elsid/dev/openmw/./components/nifosg/matrixtransform.hpp:18:9 (openmw+0x15a9075)
    #16 SceneUtil::CollectLowestTransformsVisitor::collectDataFor(osg::Drawable*) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:240:25 (openmw+0x15b8de3)
    #17 SceneUtil::Optimizer::FlattenStaticTransformsVisitor::removeTransforms(osg::Node*) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:700:14 (openmw+0x15aaa8d)
    #18 SceneUtil::Optimizer::optimize(osg::Node*, unsigned int) /home/elsid/dev/openmw/components/sceneutil/optimizer.cpp:76:27 (openmw+0x15a9817)
    #19 Resource::SceneManager::getTemplate(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) /home/elsid/dev/openmw/components/resource/scenemanager.cpp:794:27 (openmw+0x1518649)
    #20 MWRender::ActorAnimation::attach(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::basic_string_view<char, std::__1::char_traits<char> >, bool) /home/elsid/dev/openmw/apps/openmw/mwrender/actoranimation.cpp:85:86 (openmw+0x8b5966)
    #21 MWRender::NpcAnimation::insertBoundedPart(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::basic_string_view<char, std::__1::char_traits<char> >, bool, osg::Vec4f*, bool) /home/elsid/dev/openmw/apps/openmw/mwrender/npcanimation.cpp:712:40 (openmw+0x8632ed)
    #22 MWRender::NpcAnimation::addOrReplaceIndividualPart(ESM::PartReferenceType, int, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool, osg::Vec4f*, bool) /home/elsid/dev/openmw/apps/openmw/mwrender/npcanimation.cpp:817:30 (openmw+0x86165d)
    #23 MWRender::NpcAnimation::addPartGroup(int, int, std::__1::vector<ESM::PartReference, std::__1::allocator<ESM::PartReference> > const&, bool, osg::Vec4f*) /home/elsid/dev/openmw/apps/openmw/mwrender/npcanimation.cpp:932:13 (openmw+0x860f73)
    #24 MWRender::NpcAnimation::updateParts() /home/elsid/dev/openmw/apps/openmw/mwrender/npcanimation.cpp:630:13 (openmw+0x85f9df)
    #25 MWRender::NpcAnimation::updateNpcBase() /home/elsid/dev/openmw/apps/openmw/mwrender/npcanimation.cpp:519:5 (openmw+0x85df42)
    #26 MWRender::NpcAnimation::NpcAnimation(MWWorld::Ptr const&, osg::ref_ptr<osg::Group>, Resource::ResourceSystem*, bool, MWRender::NpcAnimation::ViewMode, float) /home/elsid/dev/openmw/apps/openmw/mwrender/npcanimation.cpp:296:5 (openmw+0x85cf8f)
    #27 MWRender::CharacterPreview::rebuild() /home/elsid/dev/openmw/apps/openmw/mwrender/characterpreview.cpp:376:26 (openmw+0x88f0d4)
    #28 MWGui::InventoryWindow::InventoryWindow(MWGui::DragAndDrop*, osg::Group*, Resource::ResourceSystem*) /home/elsid/dev/openmw/apps/openmw/mwgui/inventorywindow.cpp:72:19 (openmw+0x9dc2f0)
    #29 std::__1::__unique_if<MWGui::InventoryWindow>::__unique_single std::__1::make_unique<MWGui::InventoryWindow, MWGui::DragAndDrop*, osg::Group*, Resource::ResourceSystem*&>(MWGui::DragAndDrop*&&, osg::Group*&&, Resource::ResourceSystem*&) /usr/bin/../include/c++/v1/__memory/unique_ptr.h:725:32 (openmw+0x952d97)
    #30 MWGui::WindowManager::initUI() /home/elsid/dev/openmw/apps/openmw/mwgui/windowmanagerimp.cpp:312:32 (openmw+0x952d97)
    #31 OMW::Engine::prepareEngine() /home/elsid/dev/openmw/apps/openmw/engine.cpp:873:21 (openmw+0x1360828)
    #32 OMW::Engine::go() /home/elsid/dev/openmw/apps/openmw/engine.cpp:1042:5 (openmw+0x1361abd)
    #33 runApplication(int, char**) /home/elsid/dev/openmw/apps/openmw/main.cpp:228:17 (openmw+0x1356e0e)
    #34 wrapApplication(int (*)(int, char**), int, char**, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) /home/elsid/dev/openmw/components/debug/debugging.cpp:330:19 (openmw+0x1757a91)
    #35 main /home/elsid/dev/openmw/apps/openmw/main.cpp:240:12 (openmw+0x1356f0a)

  Thread T15 (tid=29158, running) created by main thread at:
    #0 pthread_create <null> (openmw+0x780f26)
    #1 std::__1::__libcpp_thread_create(unsigned long*, void* (*)(void*), void*) /usr/bin/../include/c++/v1/__threading_support:375:10 (openmw+0x159f1a5)
    #2 std::__1::thread::thread<SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1, void>(SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&)::$_1&&) /usr/bin/../include/c++/v1/thread:309:16 (openmw+0x159f1a5)
    #3 SceneUtil::WorkThread::WorkThread(SceneUtil::WorkQueue&) /home/elsid/dev/openmw/components/sceneutil/workqueue.cpp:117:7 (openmw+0x159f1a5)
    #4 std::__1::__unique_if<SceneUtil::WorkThread>::__unique_single std::__1::make_unique<SceneUtil::WorkThread, SceneUtil::WorkQueue&>(SceneUtil::WorkQueue&) /usr/bin/../include/c++/v1/__memory/unique_ptr.h:725:32 (openmw+0x159e6c3)
    #5 SceneUtil::WorkQueue::start(unsigned long) /home/elsid/dev/openmw/components/sceneutil/workqueue.cpp:54:31 (openmw+0x159e6c3)
    #6 SceneUtil::WorkQueue::WorkQueue(unsigned long) /home/elsid/dev/openmw/components/sceneutil/workqueue.cpp:39:5 (openmw+0x159e57a)
    #7 OMW::Engine::prepareEngine() /home/elsid/dev/openmw/apps/openmw/engine.cpp:772:22 (openmw+0x135f642)
    #8 OMW::Engine::go() /home/elsid/dev/openmw/apps/openmw/engine.cpp:1042:5 (openmw+0x1361abd)
    #9 runApplication(int, char**) /home/elsid/dev/openmw/apps/openmw/main.cpp:228:17 (openmw+0x1356e0e)
    #10 wrapApplication(int (*)(int, char**), int, char**, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) /home/elsid/dev/openmw/components/debug/debugging.cpp:330:19 (openmw+0x1757a91)
    #11 main /home/elsid/dev/openmw/apps/openmw/main.cpp:240:12 (openmw+0x1356f0a)
--- a/components/resource/scenemanager.cpp
+++ b/components/resource/scenemanager.cpp
@@ -2,6 +2,8 @@
 
 #include <cstdlib>
 #include <filesystem>
+#include <thread>
+#include <chrono>
 
 #include <osg/AlphaFunc>
 #include <osg/Group>
@@ -646,6 +648,8 @@ namespace Resource
                                           "Left Clavicle", "Weapon Bone", "Tail", "Bip01", "Root Bone", "BoneOffset", "AttachLight", "Arrow", "Camera", "Collision", "Right_Wrist", "Left_Wrist",
                                           "Shield_Bone", "Right_Forearm", "Left_Forearm", "Right_Upper_Arm", "Left_Clavicle", "Weapon_Bone", "Root_Bone"};
 
+                std::this_thread::sleep_for(std::chrono::milliseconds(100));
+
                 reservedNames = std::vector<std::string>(reserved, reserved + sizeof(reserved)/sizeof(reserved[0]));
 
                 for (unsigned int i=0; i<sizeof(reserved)/sizeof(reserved[0]); ++i)
Edited by elsid