Subsurface-mobile crash on deleting dive from dive list

Dirk Hohndel dirk at hohndel.org
Thu Aug 3 21:11:46 PDT 2017


> On Aug 3, 2017, at 3:49 PM, Rick Walsh <rickmwalsh at gmail.com> wrote:
> 
> Hi,
> 
> This is not a new bug, and has been reported before, but I think it's one that should be eliminated before the next release.  When deleting a dive from the dive list (select the dive from the list but hold down until the trash icon appears, then select the trash icon), the app will crash... sometimes.  But sometimes it works.

I have spent many hours on this. Yes, we either need to fix this or remove the feature.
This won't prevent another beta (it's not a regression, it's broken in the current beta), but it will prevent the actual release of 2.0.

> The most reliable way I have come up with to reproduce the bug (crash just occurred 3 of 4 times) is:
> 1) select a dive from somewhere in the list - dive details page will open
> 2) hit back button to return to dive list, with dive still selected
> 3) go to menu and open another page (e.g. 'About' or 'Settings')
> 4) hit back button to return to dive list, with dive still selected
> 5) hold down on the selected dive so the trash icon appears
> 6) crash...
> 
> That isn't the only way to reproduce the bug, but it's the most reliable way I have found.  I think it has something to do with deleting the currently selected dive, without properly selecting another dive.
> 
> Below is an extract from my subsurface log.
> TouchPointPressed without previous release event QQuickEventPoint(valid:true accepted:false state:Pressed scenePos:QPointF(70.3333,415) id:2000001 timeHeld:0)
> The item DiveDetails_QMLTYPE_71(0xcb0e14e0) is already in the PageRow
> Both point size and pixel size set. Using pixel size.
> qrc:/templates/ApplicationHeader.qml:84:13: QML Heading: Binding loop detected for property "width"
> Both point size and pixel size set. Using pixel size.
> Both point size and pixel size set. Using pixel size.
> qrc:/templates/ApplicationHeader.qml:84:13: QML Heading: Binding loop detected for property "width"
> Both point size and pixel size set. Using pixel size.
> qrc:/templates/ApplicationHeader.qml:84:13: QML Heading: Binding loop detected for property "width"
> Both point size and pixel size set. Using pixel size.
> QObject::startTimer: Timers cannot be started from another thread
> QObject::startTimer: Timers cannot be started from another thread
> QObject::startTimer: Timers cannot be started from another thread
> QObject::startTimer: Timers cannot be started from another thread
> QObject::startTimer: Timers cannot be started from another thread
> QObject::startTimer: Timers cannot be started from another thread
> QObject::startTimer: Timers cannot be started from another thread
> QObject::startTimer: Timers cannot be started from another thread
> QObject::startTimer: Timers cannot be started from another thread
> QObject::startTimer: Timers cannot be started from another thread
> Both point size and pixel size set. Using pixel size.
> qrc:/templates/ApplicationHeader.qml:84:13: QML Heading: Binding loop detected for property "width"
> Both point size and pixel size set. Using pixel size.
> Both point size and pixel size set. Using pixel size.
> "846.350: Synchronising data file"
> qrc:///qml/DiveDetailsEdit.qml:254: TypeError: Cannot read property 'dive' of null
> qrc:///qml/DiveDetailsEdit.qml:228: TypeError: Cannot read property 'dive' of null
> qrc:///qml/DiveDetailsEdit.qml:216: TypeError: Cannot read property 'dive' of null
> qrc:///qml/DiveDetailsEdit.qml:204: TypeError: Cannot read property 'dive' of null
> QObject::startTimer: Timers cannot be started from another thread
> QObject::startTimer: Timers cannot be started from another thread
> QObject::startTimer: Timers cannot be started from another thread
> QObject::startTimer: Timers cannot be started from another thread
> QObject::startTimer: Timers cannot be started from another thread
> "846.578: Preparing to save data"
> "846.621: Start saving data"
> "846.687: Start saving dives"
> "846.727: Done creating local cache"
> 
> The TypeError lines (254, 228, 216, 204) in DiveDetailsEdit.qml are similar.
>             HintsTextEdit {
>                 id: cylinderBox
> ***Line 254***                model: diveDetailsListView.currentItem ? diveDetailsListView.currentItem.modelData.dive.cylinderList : null
>                 inputMethodHints: Qt.ImhNoPredictiveText
>                 Layout.fillWidth: true
> 

My suspicion is that somehow our different models get out of sync. But it's really, really hard to debug this :-(

/D


More information about the subsurface mailing list