Closed jlblancoc closed 1 year ago
TODO: Fix all these detected potential deadlocks:
[x] WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=24985)
Cycle in lock order graph: M200827327822026584 (0x000000000000) => M201390277775448936 (0x000000000000) => M200827327822026584
Mutex M201390277775448936 acquired here while holding mutex M200827327822026584 in main thread:
#6 mrpt::opengl::CRenderizable::notifyChange() const /home/jlblanco/code/mrpt/libs/opengl/include/mrpt/opengl/CRenderizable.h:381 (opengl_objects_demo+0x8b44f)
#7 mrpt::opengl::CPointCloud::markAllPointsAsNew() /home/jlblanco/code/mrpt/libs/opengl/src/CPointCloud.cpp:430 (libmrpt-opengl.so.2.7+0x42eb1b)
#8 mrpt::opengl::CPointCloud::CPointCloud() /home/jlblanco/code/mrpt/libs/opengl/src/CPointCloud.cpp:50 (libmrpt-opengl.so.2.7+0x429e74)
Mutex M200827327822026584 acquired here while holding mutex M201390277775448936 in thread T12:
#3 std::shared_mutex::lock_shared() /usr/include/c++/12/shared_mutex:426 (libmrpt-maps.so.2.7+0x484920)
#4 std::shared_lock<std::shared_mutex>::shared_lock(std::shared_mutex&) /usr/include/c++/12/shared_mutex:727 (libmrpt-maps.so.2.7+0x48ddc0)
#5 mrpt::opengl::CPointCloud::internalBoundingBoxLocal() const /home/jlblanco/code/mrpt/libs/opengl/include/mrpt/opengl/CPointCloud.h:98 (libmrpt-opengl.so.2.7+0x42f570)
#6 mrpt::opengl::CRenderizable::getBoundingBoxLocalf() const /home/jlblanco/code/mrpt/libs/opengl/src/CRenderizable.cpp:269 (libmrpt-opengl.so.2.7+0x4898f9)
#7 mrpt::opengl::depthAndVisibleInView(mrpt::opengl::CRenderizable const*, mrpt::opengl::TRenderMatrices const&, bool) /home/jlblanco/code/mrpt/libs/opengl/src/RenderQueue.cpp:101 (libmrpt-opengl.so.2.7+0x4fa10b)
#8 mrpt::opengl::enqueueForRendering(std::deque<std::shared_ptr<mrpt::opengl::CRenderizable>, std::allocator<std::shared_ptr<mrpt::opengl::CRenderizable> > > const&, mrpt::opengl::TRenderMatrices const&, std::map<unsigned char, std::multimap<float, mrpt::opengl::RenderQueueElement, std::less<float>, std::allocator<std::pair<float const, mrpt::opengl::RenderQueueElement> > >, std::less<unsigned char>, std::allocator<std::pair<unsigned char const, std::multimap<float, mrpt::opengl::RenderQueueElement, std::less<float>, std::allocator<std::pair<float const, mrpt::opengl::RenderQueueElement> > > > > >&, bool, bool, mrpt::opengl::RenderQueueStats*) /home/jlblanco/code/mrpt/libs/opengl/src/RenderQueue.cpp:330 (libmrpt-opengl.so.2.7+0x4faff4)
[x] WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) (pid=24985)
Mutex M229819216063133224 acquired here while holding mutex M229537741086421952 in main thread:
#0 pthread_rwlock_wrlock ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1436 (libtsan.so.2+0x496df)
#1 __glibcxx_rwlock_wrlock /usr/include/c++/12/shared_mutex:80 (opengl_objects_demo+0x8a992)
#2 std::__shared_mutex_pthread::lock() /usr/include/c++/12/shared_mutex:193 (opengl_objects_demo+0x8aa1a)
#3 std::shared_mutex::lock() /usr/include/c++/12/shared_mutex:420 (opengl_objects_demo+0x8aae8)
#4 std::unique_lock<std::shared_mutex>::lock() /usr/include/c++/12/bits/unique_lock.h:139 (opengl_objects_demo+0x9cddb)
#5 std::unique_lock<std::shared_mutex>::unique_lock(std::shared_mutex&) /usr/include/c++/12/bits/unique_lock.h:69 (opengl_objects_demo+0x94176)
#6 mrpt::opengl::CRenderizable::notifyChange() const /home/jlblanco/code/mrpt/libs/opengl/include/mrpt/opengl/CRenderizable.h:381 (opengl_objects_demo+0x8b44f)
#7 mrpt::opengl::CSetOfTriangles::insertTriangle(mrpt::opengl::TTriangle const&) <null> (libmrpt-maps.so.2.7+0x642de6)
Mutex M229537741086421952 acquired here while holding mutex M229819216063133224 in thread T12:
#0 pthread_rwlock_rdlock ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1406 (libtsan.so.2+0x4666f)
#1 __glibcxx_rwlock_rdlock /usr/include/c++/12/shared_mutex:78 (libmrpt-maps.so.2.7+0x48482c)
#2 std::__shared_mutex_pthread::lock_shared() /usr/include/c++/12/shared_mutex:229 (libmrpt-maps.so.2.7+0x48486c)
#3 std::shared_mutex::lock_shared() /usr/include/c++/12/shared_mutex:426 (libmrpt-maps.so.2.7+0x484920)
#4 std::shared_lock<std::shared_mutex>::shared_lock(std::shared_mutex&) /usr/include/c++/12/shared_mutex:727 (libmrpt-maps.so.2.7+0x48ddc0)
#5 mrpt::opengl::CRenderizableShaderTriangles::trianglesBoundingBox() const /home/jlblanco/code/mrpt/libs/opengl/src/CRenderizableShaderTriangles.cpp:174 (libmrpt-opengl.so.2.7+0x497f2d)
#6 mrpt::opengl::CSetOfTriangles::internalBoundingBoxLocal() const /home/jlblanco/code/mrpt/libs/opengl/src/CSetOfTriangles.cpp:188 (libmrpt-opengl.so.2.7+0x4b7cea)
#7 mrpt::opengl::CRenderizable::getBoundingBoxLocalf() const /home/jlblanco/code/mrpt/libs/opengl/src/CRenderizable.cpp:269 (libmrpt-opengl.so.2.7+0x4898f9)
#8 mrpt::opengl::CSetOfObjects::internalBoundingBoxLocal() const /home/jlblanco/code/mrpt/libs/opengl/src/CSetOfObjects.cpp:283 (libmrpt-opengl.so.2.7+0x4a1e34)
#9 mrpt::opengl::CRenderizable::getBoundingBoxLocalf() const /home/jlblanco/code/mrpt/libs/opengl/src/CRenderizable.cpp:269 (libmrpt-opengl.so.2.7+0x4898f9)
#10 mrpt::opengl::depthAndVisibleInView(mrpt::opengl::CRenderizable const*, mrpt::opengl::TRenderMatrices const&, bool) /home/jlblanco/code/mrpt/libs/opengl/src/RenderQueue.cpp:101 (libmrpt-opengl.so.2.7+0x4fa10b)
#11 mrpt::opengl::enqueueForRendering(std::deque<std::shared_ptr<mrpt::opengl::CRenderizable>, std::allocator<std::shared_ptr<mrpt::opengl::CRenderizable> > > const&, mrpt::opengl::TRenderMatrices const&, std::map<unsigned char, std::multimap<float, mrpt::opengl::RenderQueueElement, std::less<float>, std::allocator<std::pair<float const, mrpt::opengl::RenderQueueElement> > >, std::less<unsigned char>, std::allocator<std::pair<unsigned char const, std::multimap<float, mrpt::opengl::RenderQueueElement, std::less<float>, std::allocator<std::pair<float const, mrpt::opengl::RenderQueueElement> > > > > >&, bool, bool, mrpt::opengl::RenderQueueStats*) /home/jlblanco/code/mrpt/libs/opengl/src/RenderQueue.cpp:330 (libmrpt-opengl.so.2.7+0x4faff4)
Write of size 8 at 0x7b5c0000a2a0 by main thread:
#0 mrpt::poses::CPose3D::operator=(mrpt::poses::CPose3D const&) /home/jlblanco/code/mrpt/libs/poses/include/mrpt/poses/CPose3D.h:79 (opengl_objects_demo+0x8f4b6)
#1 mrpt::opengl::CRenderizable::setPose(mrpt::poses::CPose3D const&) /home/jlblanco/code/mrpt/libs/opengl/src/CRenderizable.cpp:189 (libmrpt-opengl.so.2.7+0x488f5f)
#2 TestOpenGLObjects() /home/jlblanco/code/mrpt/samples/opengl_objects_demo/test.cpp:1119 (opengl_objects_demo+0x863ab)
#3 main /home/jlblanco/code/mrpt/samples/opengl_objects_demo/test.cpp:1156 (opengl_objects_demo+0x892c1)
Previous read of size 8 at 0x7b5c0000a2a0 by thread T12 (mutexes: write M135524772447596864, write M147633611921206456):
#0 mrpt::poses::CPose3D::getHomogeneousMatrix(mrpt::math::CMatrixFixed<double, 4ul, 4ul>&) const /home/jlblanco/code/mrpt/libs/poses/src/CPose3D.cpp:824 (libmrpt-poses.so.2.7+0x88ab9f)
#1 mrpt::math::CMatrixFixed<double, 4ul, 4ul> mrpt::poses::CPoseOrPoint<mrpt::poses::CPose3D, 6ul>::getHomogeneousMatrixVal<mrpt::math::CMatrixFixed<double, 4ul, 4ul> >() const /home/jlblanco/code/mrpt/libs/poses/include/mrpt/poses/CPoseOrPoint.h:280 (libmrpt-maps.so.2.7+0x4a6fc2)
#2 mrpt::opengl::enqueueForRendering(std::deque<std::shared_ptr<mrpt::opengl::CRenderizable>, std::allocator<std::shared_ptr<mrpt::opengl::CRenderizable> > > const&, mrpt::opengl::TRenderMatrices const&, std::map<unsigned char, std::multimap<float, mrpt::opengl::RenderQueueElement, std::less<float>, std::allocator<std::pair<float const, mrpt::opengl::RenderQueueElement> > >, std::less<unsigned char>, std::allocator<std::pair<unsigned char const, std::multimap<float, mrpt::opengl::RenderQueueElement, std::less<float>, std::allocator<std::pair<float const, mrpt::opengl::RenderQueueElement> > > > > >&, bool, bool, mrpt::opengl::RenderQueueStats*) /home/jlblanco/code/mrpt/libs/opengl/src/RenderQueue.cpp:294 (libmrpt-opengl.so.2.7+0x4fab10)
#3 mrpt::opengl::Viewport::renderNormalSceneMode(mrpt::opengl::CCamera const*, bool) const /home/jlblanco/code/mrpt/libs/opengl/src/Viewport.cpp:396 (libmrpt-opengl.so.2.7+0x545e65)
Write of size 1 at 0x7b3800003e18 by thread T12 (mutexes: write M135524772447596864, write M147633611921206456):
#0 mrpt::opengl::CTextMessageCapable::TListTextMessages::regenerateGLobjects() const /home/jlblanco/code/mrpt/libs/opengl/src/CTextMessageCapable.cpp:37 (libmrpt-opengl.so.2.7+0x4cb2f0)
#1 mrpt::opengl::Viewport::renderTextMessages() const /home/jlblanco/code/mrpt/libs/opengl/src/Viewport.cpp:477 (libmrpt-opengl.so.2.7+0x546927)
#2 mrpt::opengl::Viewport::render(int, int, int, int, mrpt::opengl::CCamera const*) const /home/jlblanco/code/mrpt/libs/opengl/src/Viewport.cpp:654 (libmrpt-opengl.so.2.7+0x5479d6)
#3 mrpt::opengl::Scene::render() const /home/jlblanco/code/mrpt/libs/opengl/src/Scene.cpp:97 (libmrpt-opengl.so.2.7+0x50da40)
Previous write of size 1 at 0x7b3800003e18 by main thread:
#0 mrpt::opengl::CTextMessageCapable::updateTextMessage(unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /home/jlblanco/code/mrpt/libs/opengl/src/CTextMessageCapable.cpp:55 (libmrpt-opengl.so.2.7+0x4cb45e)
#1 mrpt::gui::CDisplayWindow3D::updateTextMessage(unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /home/jlblanco/code/mrpt/libs/gui/include/mrpt/gui/CDisplayWindow3D.h:340 (opengl_objects_demo+0x8cba1)
#2 TestOpenGLObjects() /home/jlblanco/code/mrpt/samples/opengl_objects_demo/test.cpp:1138 (opengl_objects_demo+0x864ea)
Write of size 8 at 0x7ffce378ad68 by thread T12 (mutexes: write M135524772447596864):
#0 mrpt::gui::CDisplayWindow3D::internal_setRenderingFPS(double) /home/jlblanco/code/mrpt/libs/gui/src/CDisplayWindow3D.cpp:787 (libmrpt-gui.so.2.7+0x1437d3)
#1 mrpt::gui::CMyGLCanvas_DisplayWindow3D::OnPostRenderSwapBuffers(double, wxPaintDC&) /home/jlblanco/code/mrpt/libs/gui/src/CDisplayWindow3D.cpp:210 (libmrpt-gui.so.2.7+0x14075c)
#2 mrpt::gui::CWxGLCanvasBase::Render() /home/jlblanco/code/mrpt/libs/gui/src/CWxGLCanvasBase.cpp:230 (libmrpt-gui.so.2.7+0x17357f)
#3 mrpt::gui::CWxGLCanvasBase::OnPaint(wxPaintEvent&) /home/jlblanco/code/mrpt/libs/gui/src/CWxGLCanvasBase.cpp:238 (libmrpt-gui.so.2.7+0x1736c4)
#4 wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) <null> (libwx_baseu-3.0.so.0+0x17d17d)
#5 mrpt::gui::WxSubsystem::wxMainThread() /home/jlblanco/code/mrpt/libs/gui/src/WxSubsystem.cpp:978 (libmrpt-gui.so.2.7+0x17cd02)
#6 void std::__invoke_impl<void, void (*)()>(std::__invoke_other, void (*&&)()) /usr/include/c++/12/bits/invoke.h:61 (libmrpt-gui.so.2.7+0x18644d)
#7 std::__invoke_result<void (*)()>::type std::__invoke<void (*)()>(void (*&&)()) /usr/include/c++/12/bits/invoke.h:96 (libmrpt-gui.so.2.7+0x1863a2)
#8 void std::thread::_Invoker<std::tuple<void (*)()> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/include/c++/12/bits/std_thread.h:252 (libmrpt-gui.so.2.7+0x1862d4)
#9 std::thread::_Invoker<std::tuple<void (*)()> >::operator()() /usr/include/c++/12/bits/std_thread.h:259 (libmrpt-gui.so.2.7+0x186176)
#10 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)()> > >::_M_run() /usr/include/c++/12/bits/std_thread.h:210 (libmrpt-gui.so.2.7+0x18594c)
#11 <null> <null> (libstdc++.so.6+0xdc2b2)
Previous read of size 8 at 0x7ffce378ad68 by main thread:
#0 mrpt::gui::CDisplayWindow3D::getRenderingFPS() const /home/jlblanco/code/mrpt/libs/gui/include/mrpt/gui/CDisplayWindow3D.h:345 (opengl_objects_demo+0x8cc4f)
#1 TestOpenGLObjects() /home/jlblanco/code/mrpt/samples/opengl_objects_demo/test.cpp:1142 (opengl_objects_demo+0x8648e)
#2 main /home/jlblanco/code/mrpt/samples/opengl_objects_demo/test.cpp:1156 (opengl_objects_demo+0x892c1)
Location is stack of main thread.
Write of size 8 at 0x7ffce378ac90 by thread T12 (mutexes: write M135524772447596864):
#0 mrpt::non_copiable_ptr_basic<void>::operator=(void*) <null> (libmrpt-gui.so.2.7+0x12be0e)
#1 mrpt::gui::CBaseGUIWindow::notifyChildWindowDestruction() /home/jlblanco/code/mrpt/libs/gui/src/CBaseGUIWindow.cpp:149 (libmrpt-gui.so.2.7+0x128068)
#2 mrpt::gui::C3DWindowDialog::OnClose(wxCloseEvent&) /home/jlblanco/code/mrpt/libs/gui/src/CDisplayWindow3D.cpp:320 (libmrpt-gui.so.2.7+0x1411d0)
#3 wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) <null> (libwx_baseu-3.0.so.0+0x17d17d)
#4 mrpt::gui::WxSubsystem::wxMainThread() /home/jlblanco/code/mrpt/libs/gui/src/WxSubsystem.cpp:978 (libmrpt-gui.so.2.7+0x17cd02)
#5 void std::__invoke_impl<void, void (*)()>(std::__invoke_other, void (*&&)()) /usr/include/c++/12/bits/invoke.h:61 (libmrpt-gui.so.2.7+0x18644d)
#6 std::__invoke_result<void (*)()>::type std::__invoke<void (*)()>(void (*&&)()) /usr/include/c++/12/bits/invoke.h:96 (libmrpt-gui.so.2.7+0x1863a2)
#7 void std::thread::_Invoker<std::tuple<void (*)()> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/include/c++/12/bits/std_thread.h:252 (libmrpt-gui.so.2.7+0x1862d4)
#8 std::thread::_Invoker<std::tuple<void (*)()> >::operator()() /usr/include/c++/12/bits/std_thread.h:259 (libmrpt-gui.so.2.7+0x186176)
#9 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)()> > >::_M_run() /usr/include/c++/12/bits/std_thread.h:210 (libmrpt-gui.so.2.7+0x18594c)
#10 <null> <null> (libstdc++.so.6+0xdc2b2)
Previous read of size 8 at 0x7ffce378ac90 by main thread:
#0 mrpt::non_copiable_ptr_basic<void>::operator!=(void const*) const <null> (libmrpt-gui.so.2.7+0x12bf80)
#1 mrpt::gui::CBaseGUIWindow::isOpen() /home/jlblanco/code/mrpt/libs/gui/src/CBaseGUIWindow.cpp:202 (libmrpt-gui.so.2.7+0x12830d)
#2 TestOpenGLObjects() /home/jlblanco/code/mrpt/samples/opengl_objects_demo/test.cpp:1111 (opengl_objects_demo+0x86541)
#3 main /home/jlblanco/code/mrpt/samples/opengl_objects_demo/test.cpp:1156 (opengl_objects_demo+0x892c1)
Location is stack of main thread.
Merging #1268 (2b2b217) into develop (86dcea1) will increase coverage by
0.06%
. The diff coverage is59.15%
.:exclamation: Current head 2b2b217 differs from pull request most recent head 043ce1c. Consider uploading reports for the commit 043ce1c to get more accurate results
@@ Coverage Diff @@
## develop #1268 +/- ##
===========================================
+ Coverage 39.08% 39.14% +0.06%
===========================================
Files 1262 1263 +1
Lines 109441 109665 +224
===========================================
+ Hits 42777 42931 +154
- Misses 66664 66734 +70
Impacted Files | Coverage Δ | |
---|---|---|
libs/core/include/mrpt/core/WorkerThreadsPool.h | 86.66% <ø> (ø) |
|
libs/gui/include/mrpt/gui/CBaseGUIWindow.h | 0.00% <ø> (ø) |
|
libs/gui/include/mrpt/gui/CDisplayWindow3D.h | 0.00% <ø> (ø) |
|
libs/gui/src/CBaseGUIWindow.cpp | 0.00% <0.00%> (ø) |
|
libs/gui/src/CDisplayWindow.cpp | 0.00% <0.00%> (ø) |
|
libs/gui/src/CDisplayWindow3D.cpp | 0.00% <0.00%> (ø) |
|
libs/gui/src/CDisplayWindowPlots.cpp | 0.00% <0.00%> (ø) |
|
libs/hwdrivers/src/CSkeletonTracker.cpp | 0.00% <0.00%> (ø) |
|
libs/maps/src/opengl/CAngularObservationMesh.cpp | 19.65% <0.00%> (ø) |
|
libs/opengl/include/mrpt/opengl/CAssimpModel.h | 0.00% <ø> (ø) |
|
... and 65 more |
Continue to review full report at Codecov.
Legend - Click here to learn more
Δ = absolute <relative> (impact)
,ø = not affected
,? = missing data
Powered by Codecov. Last update 86dcea1...043ce1c. Read the comment docs.
Changed apps/libraries