Few bugs and a feature req from testing Subsurface

Miika Turkia miika.turkia at gmail.com
Wed Mar 12 14:49:57 PDT 2014


On Mon, Mar 10, 2014 at 11:34 PM, Linus Torvalds <
torvalds at linux-foundation.org> wrote:

> On Mon, Mar 10, 2014 at 4:33 AM, Miika Turkia <miika.turkia at gmail.com>
> wrote:
> > Features:
> > - Show original time and new time when adjusting dive time on the dialog
> >
> > Bugs:
> > - I have one DC recording near surface time properly another is not
> > recording these times. This results in the second DC recording shorter
> dive
> > duration. And Subsurface seems to trust more the latter DC when reporting
> > dive duration even though it used to be that first downloaded DC was the
> > main one.
>
> I actually think that you may see subsurface itself discounting any
> surface time.
>
> Some dive computers tend to show events at the surface (particularly
> at the end of the dive) as you are floating around waiting to be
> picked up by the boat. That can be very annoying if they count towards
> the dive time, since they can make a 45-minute dive look like a much
> longer dive.
>
> Similarly, if you pop up to the surface in between dives (either to
> look for a buddy, or because you merged two dives because the first
> dive was a 5-minute "jump off the boat, notice you're in the wrong
> spot, get back on, reposition, and jump back in"), then the dive sure
> shouldn't count as a long dive just because you spent 10+ minutes in
> between on the surface.
>
> See dive.c: fixup_dc_duration()
>

I have attached a log for this one. Vyper shows a few minutes longer dive
than Stingray. Also Vyper was loaded first, but dive duration from Stingray
seems to be more significant (or the surface time is not counted).


> > - Downloading first EAN32 dive from one DC and then downloading second DC
> > for the same dive with EAN21 (this DC resets its EAN if it is set too
> early
> > before dive), forces the whole dive to show as being air in this case. I
> > ended up with two cylinders, first with EAN32 and proper start and end
> > pressures as reported by air integration, second with AIR and no pressure
> > info (no air integration on second).
>
> Yes. We currently have no really good way of *fixing* dive computer
> event association with cylinders.
>
> We try to do a good job of creating multiple cylinders and associating
> the dive computer with the right cylinder (because that's actually a
> real use case, with different dive computers sensing the pressure of
> different cylinder), but in your case there weren't actually multiple
> cylinders, there was just a confused dive computer.
>
> The gas switch and pressure events get associated with the index of
> the cylinder that matches the gasmix of the dive computer etc, but
> there's room for improvement. I suggest, for example, that if somebody
> manually deletes a cylinder so that the divecomputer cylinder index
> now points to something that no longer exists, we might just want to
> say "ok, let's just reset the cylinder index".
>
> But I think you'd need to implement that logic. I *might* take a look
> at it if you send me the XML file for the dive, but no promises.
>

I'll try to re-download that log (I already fixed this manually on my main
log). However, I get currently download errors from the other DC, so it'll
have to wait for a retry with more time to tinker with it..

>
> > - Many events are missing the label explaining what they are (on the
> > tooltip)
>
> Do we even know what the events really are? I don't think we have very
> good coverage about the event numbers for most dive computers..
>

The attached log shows "ascent" warning for Stinger on XML, but GUI does
not show this. As far as I know, we should know the Suunto events are quite
well known to us and the texts disappeared with the new profile.

> - Dive buddy selection from list with keyboard is not working properly. I
> have entries with first name only and with full name. If I type start of
the
> first name, I get list of matches properly, but cannot select the full
name
> with arrow keys.

Ugh. Tomaz - this sounds very similar to the cylinder selection
> problem we used to have (still have?)
>

I just noticed that I am able to select the longer name with arrow up, but
cannot walk through the list. With arrows.

>
> > Crash:
> > Dive data import error => Segmentation fault
> > [5.539] ERROR: Unexpected answer start byte(s). [in suunto_vyper.c:371
> > (suunto_vyper_read_dive)]
> > Segmentation fault (core dumped)
> >
> > Unfortunately the default core handler seems to be apport and it ignores
> > cores from apps that do not belong to any package. So no details
> available
> > on this one.
>
> If it is at all reproducible, try just running it under gdb, then gdb
> will catch the fault and you can see where it is etc.
>

This is a different crash, but occurred after import error as well.
However, this time I got some dives in 1970 and when trying to view
them...crash.

Not sure if this is the same or different crash. For some reason I am not
able to produce core file from gdb, but here is at least back trace:
Program received signal SIGABRT, Aborted.
0x00007ffff211ff77 in __GI_raise (sig=sig at entry=6)
    at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56    ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  0x00007ffff211ff77 in __GI_raise (sig=sig at entry=6)
    at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1  0x00007ffff21235e8 in __GI_abort () at abort.c:90
#2  0x00007ffff2d46c72 in qt_message_output(QtMsgType, char const*) ()
   from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#3  0x00007ffff2d46fd9 in ?? () from
/usr/lib/x86_64-linux-gnu/libQtCore.so.4
#4  0x00007ffff2d477e4 in qFatal(char const*, ...) ()
   from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#5  0x00000000004a5ffc in DiveItem::data (this=0x21357c0, column=0, role=0)
    at ../qt-ui/models.cpp:1088
#6  0x00000000004a5632 in TreeModel::data (this=0x2168c30, index=...,
role=0)
    at ../qt-ui/models.cpp:924
#7  0x00007ffff3c433f3 in QSortFilterProxyModel::data(QModelIndex const&,
int) const () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#8  0x00007ffff3c64cf5 in
QStyledItemDelegate::initStyleOption(QStyleOptionViewItem*, QModelIndex
const&) const () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#9  0x00007ffff3c63e7c in QStyledItemDelegate::paint(QPainter*,
QStyleOptionViewItem const&, QModelIndex const&) const ()
   from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#10 0x00007ffff3c03139 in QTreeView::drawRow(QPainter*,
QStyleOptionViewItem const&, QModelIndex const&) const () from
/usr/lib/x86_64-linux-gnu/libQtGui.so.4
#11 0x00007ffff3c06682 in QTreeView::drawTree(QPainter*, QRegion const&)
const
    () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
---Type <return> to continue, or q <return> to quit---
#12 0x00007ffff3c0a199 in
QTreeViewPrivate::renderTreeToPixmapForAnimation(QRect const&) const ()
from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#13 0x00007ffff3c0a86e in QTreeViewPrivate::beginAnimatedOperation() ()
   from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#14 0x00007ffff3c0aa79 in QTreeViewPrivate::expand(int, bool) ()
   from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#15 0x00007ffff3c0bbb0 in
QTreeViewPrivate::expandOrCollapseItemAtPos(QPoint const&) () from
/usr/lib/x86_64-linux-gnu/libQtGui.so.4
#16 0x00007ffff3c0deab in QTreeView::mousePressEvent(QMouseEvent*) ()
   from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#17 0x00007ffff371d431 in QWidget::event(QEvent*) ()
   from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#18 0x00007ffff3abf66e in QFrame::event(QEvent*) ()
   from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#19 0x00007ffff3bcee03 in QAbstractItemView::viewportEvent(QEvent*) ()
   from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#20 0x00007ffff3c0db10 in QTreeView::viewportEvent(QEvent*) ()
   from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#21 0x00007ffff2e538a6 in
QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*)
() from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#22 0x00007ffff36cde5c in QApplicationPrivate::notify_helper(QObject*,
QEvent*)
    () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#23 0x00007ffff36d462d in QApplication::notify(QObject*, QEvent*) ()
---Type <return> to continue, or q <return> to quit---
   from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#24 0x00007ffff2e5373d in QCoreApplication::notifyInternal(QObject*,
QEvent*)
    () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#25 0x00007ffff36d3de3 in QApplicationPrivate::sendMouseEvent(QWidget*,
QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) ()
   from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#26 0x00007ffff3748abb in ?? () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#27 0x00007ffff3748359 in QApplication::x11ProcessEvent(_XEvent*) ()
   from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#28 0x00007ffff376fc02 in ?? () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#29 0x00007fffeec343b6 in g_main_context_dispatch ()
   from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#30 0x00007fffeec34708 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#31 0x00007fffeec347ac in g_main_context_iteration ()
   from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#32 0x00007ffff2e80ad5 in
QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
() from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#33 0x00007ffff376fcb6 in ?? () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#34 0x00007ffff2e5230f in
QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from
/usr/lib/x86_64-linux-gnu/libQtCore.so.4
#35 0x00007ffff2e52605 in
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from
/usr/lib/x86_64-linux-gnu/libQtCore.so.4
#36 0x00007ffff2e57deb in QCoreApplication::exec() ()
---Type <return> to continue, or q <return> to quit---
   from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#37 0x0000000000448608 in run_ui () at ../qt-gui.cpp:165
#38 0x0000000000439af7 in main (argc=2, argv=0x7fffffffdf38) at
../main.cpp:56
(gdb)
(gdb) generate-core-file
warning: target file /proc/14362/cmdline contained unexpected null
characters
Couldn't get registers: No such process.
(gdb) frame 5
#5  0x00000000004a5ffc in DiveItem::data (this=0x21357c0, column=0, role=0)
    at ../qt-ui/models.cpp:1088
1088            Q_ASSERT(dive != NULL);

I have 2 more testing days ahead of me, so let's see if other crashes
occur, or if I can catch the original one on debugger.

miika
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.hohndel.org/pipermail/subsurface/attachments/20140312/968a5996/attachment-0001.html>


More information about the subsurface mailing list