Hi!
Is Update 2 already "code freezed"?
It would be very nice if ESRI could take this problem into account:
I am able to reproduce a segmentation fault if a SceneGraphicsView is destroyed
(and screenToLocation where performed before).
Behaviour:
The basemap (crash should be reproducable using the topographic.tpk) is loaded and then:
- i resize the window and therefore the size of the scene widget ( i increase/decrease the width)
- move the scene using the mouse and release the button while moving
- destroy the scene (press 'create/destroy') while the scene is still moving
-> crash -> you got it -> verify call stack
-> create the scene again (press 'create/destroy')
start at the beginning
Based on my experience i need not more than 10 attempts to reproduce the crash.
EDIT:
Or you can simply use the second example "BasicSceneView_crashOnResizeDestroy_2017-11-21_automatic.tgz"
(Run and after several seconds....segFault)
I already opened an official case "Esri Case #02020238 - [BOS] segmentation fault on destruction",
and i will add the BUG number if available (hopefully only in a few days)
(I add the same example to reproduce the issue as attached to the case.)
Thanks in advance!
Norbert
Hello Norbert!
We are very very close to code freeze, but we will take a close look at this one. Thank you for the thorough test cases.
Eric
Hi Eric!
Good to know, that the code freeze isn`t reached yet. So there is a chance that the bug can be solved 🙂
I don´t like to put more pressure than necessary but the truth is:
We need this bug to be solved or a 100%workaround until mid of February!
Almost certainly we have to escalate this bug otherwise.
Thanks for your support!
Norbert
Hi Norbert,
Using your test apps, I am trying the best I can to segfault....but no luck. This is Suse linux 64, yes? Which version of Qt? 5.9?
Hi Eric!
Linux:
The second example reproduces the problem in ~2 seconds
The first example requires manual interaction.
Here is the description:
I use the ESRI example 'BasicSceneView' to show a simple 3D scene.
I modified the user interface (ui) to create/destroy the sceneView clicking on a button.
(Use case: create an application and the use can switch between 2D and 3D.)
I add a timer calling m_sceneView->screenToLocation every 50ms.
Behaviour:
The basemap (crash should be reproducable using the topographic.tpk) is loaded and then:
- i resize the window and therefore the size of the scene widget ( i increase/decrease the width)
- move the scene using the mouse and release the button while moving
- destroy the scene (press 'create/destroy') while the scene is still moving
-> crash -> you got it -> verify call stack
-> create the scene again (press 'create/destroy')
start at the beginning
Based on my experience i need not more than 10 attempts to reproduce the crash.
Assumption:
The asynchron operation 'screenToLocation' is performed in a seperate thread (maybe more than one at the same time)
and there a not synchronized correctly while shutting down the scene/sceneView.
[Maybe the situation causing the problem is focused here!?
https://stackoverflow.com/questions/44160753/strange-shared-ptr-behaviour
(https://youtu.be/JfmTagWcqoE?t=13m)]
(gdb) bt
#0 0x00007fffec25aeea in ?? () from /usr/lib64/libnvidia-glcore.so.384.69
#1 0x00007fffec2b9687 in ?? () from /usr/lib64/libnvidia-glcore.so.384.69
#2 0x00007fffec2b97ee in ?? () from /usr/lib64/libnvidia-glcore.so.384.69
#3 0x00007fffec2b24e6 in ?? () from /usr/lib64/libnvidia-glcore.so.384.69
#4 0x00007fffebef297b in ?? () from /usr/lib64/libnvidia-glcore.so.384.69
#5 0x00007fffebef37f6 in ?? () from /usr/lib64/libnvidia-glcore.so.384.69
#6 0x00007ffff144487e in ?? () from /usr/lib64/libruntimecore.so
#7 0x00007ffff145257b in ?? () from /usr/lib64/libruntimecore.so
#8 0x00007ffff0afcadf in ?? () from /usr/lib64/libruntimecore.so
#9 0x00007ffff0507404 in ?? () from /usr/lib64/libruntimecore.so
#10 0x00007fffefe77212 in RT_GeoView_pause () from /usr/lib64/libruntimecore.so
#11 0x00007ffff755ae36 in ESRI::RuntimeCore::QRTGeoView::pause(ESRI::RuntimeCore::QRTDevice*, ESRI::RuntimeCore::QRTGraphicsHardwareResources) () from /usr/lib64/libEsriCommonQt.so
#12 0x00007ffff784a065 in QRTImpl::GeoViewImpl::pause(std::shared_ptr<QRTImpl::DeviceImpl> const&, QRTImpl::GraphicsHardwareResources) () from /usr/lib64/libEsriCommonQt.so
#13 0x00000000004c4b5a in Esri::ArcGISRuntime::GeoView::pauseAndRecycleResources() ()
#14 0x00000000004d5c37 in Esri::ArcGISRuntime::SceneGraphicsScene::~SceneGraphicsScene() ()
#15 0x00000000004d5c49 in Esri::ArcGISRuntime::SceneGraphicsScene::~SceneGraphicsScene() ()
#16 0x000000000048e419 in Esri::ArcGISRuntime::SceneGraphicsView::~SceneGraphicsView() ()
#17 0x000000000048e469 in Esri::ArcGISRuntime::SceneGraphicsView::~SceneGraphicsView() ()
#18 0x00000000004734e2 in MyWidget::~MyWidget() ()
#19 0x00000000004735c9 in MyWidget::~MyWidget() ()
#20 0x0000000000474132 in BasicSceneView::onCreateDestroy() ()
#21 0x00007ffff4cbb493 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib64/libQt5Core.so.5
#22 0x00007ffff65d3e72 in QAbstractButton::clicked(bool) () from /usr/lib64/libQt5Widgets.so.5
#23 0x00007ffff65d407a in ?? () from /usr/lib64/libQt5Widgets.so.5
#24 0x00007ffff65d5573 in ?? () from /usr/lib64/libQt5Widgets.so.5
#25 0x00007ffff65d56e4 in QAbstractButton::mouseReleaseEvent(QMouseEvent*) () from /usr/lib64/libQt5Widgets.so.5
#26 0x00007ffff6463507 in QWidget::event(QEvent*) () from /usr/lib64/libQt5Widgets.so.5
#27 0x00007ffff6425b6c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
#28 0x00007ffff642cf5c in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
#29 0x00007ffff4c91935 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5
#30 0x00007ffff642bdd9 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () from /usr/lib64/libQt5Widgets.so.5
#31 0x00007ffff647bc11 in ?? () from /usr/lib64/libQt5Widgets.so.5
#32 0x00007ffff647e173 in ?? () from /usr/lib64/libQt5Widgets.so.5
#33 0x00007ffff6425b6c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
#34 0x00007ffff642c8c0 in QApplication::notify(QObject*, QEvent*) () from /usr/lib64/libQt5Widgets.so.5
#35 0x00007ffff4c91935 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib64/libQt5Core.so.5
#36 0x00007ffff5cb34ed in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /usr/lib64/libQt5Gui.so.5
#37 0x00007ffff5cb50a5 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /usr/lib64/libQt5Gui.so.5
#38 0x00007ffff5c938ab in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib64/libQt5Gui.so.5
#39 0x00007fffe79a0ec0 in ?? () from /usr/lib64/libQt5XcbQpa.so.5
#40 0x00007fffed21e134 in g_main_context_dispatch () from /usr/lib64/libglib-2.0.so.0