V100.1: m_sceneView->screenToLocation causes crash

664
4
11-21-2017 06:31 AM
NorbertThoden
Occasional Contributor III

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

0 Kudos
4 Replies
EricBader
Occasional Contributor III

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

NorbertThoden
Occasional Contributor III

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

EricBader
Occasional Contributor III

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?

0 Kudos
NorbertThoden
Occasional Contributor III

Hi Eric!

Linux:

  • ArcGIS: V100.1
  • OpenSuse 42.3 x86_64
  • Qt: 5.9.1
  • gcc: gcc version 4.8.5

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

0 Kudos