I have an crash on exit, with some compilations occurs always, and doesn't crash with other compilations from same source. The attached patch might fix it, but I am not certain due to the weird crash/no-crash behavior.
If I read the attached backtrace correctly, the destructor is called twice. What is that about? Do we have multiple table views and this works as intended? All this makes me wonder, what is going on my computer as I had similar situation with TestParse as well. First it crashes, but with new compilation from same sources and no crash. miika
Thread 1 "subsurface" received signal SIGSEGV, Segmentation fault. 0x00000000006b4915 in TableView::~TableView (this=0x1c487f0, __in_chrg=<optimized out>) at /home/mturkia/source/subsurface/subsurface/desktop-widgets/tableview.cpp:70 70 for (int i = 1; oldDefault && ui.tableView && i < ui.tableView->model()->columnCount(); i++) { (gdb) bt #0 0x00000000006b4915 in TableView::~TableView (this=0x1c487f0, __in_chrg=<optimized out>) at /home/mturkia/source/subsurface/subsurface/desktop-widgets/tableview.cpp:70 #1 0x00000000006b4c88 in TableView::~TableView (this=0x1c487f0, __in_chrg=<optimized out>) at /home/mturkia/source/subsurface/subsurface/desktop-widgets/tableview.cpp:85 #2 0x00007ffff2cbc28b in QObjectPrivate::deleteChildren() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #3 0x00007ffff5c136c8 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #4 0x00007ffff5d73759 in QSplitter::~QSplitter() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #5 0x00007ffff2cbc28b in QObjectPrivate::deleteChildren() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #6 0x00007ffff5c136c8 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #7 0x00007ffff5c13899 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #8 0x00007ffff2cbc28b in QObjectPrivate::deleteChildren() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #9 0x00007ffff5c136c8 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #10 0x00007ffff5c13899 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #11 0x00007ffff2cbc28b in QObjectPrivate::deleteChildren() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #12 0x00007ffff5c136c8 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #13 0x00007ffff5c13899 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #14 0x00007ffff2cbc28b in QObjectPrivate::deleteChildren() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #15 0x00007ffff5c136c8 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #16 0x00007ffff5d9dd59 in QScrollArea::~QScrollArea() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #17 0x00007ffff2cbc28b in QObjectPrivate::deleteChildren() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #18 0x00007ffff5c136c8 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #19 0x00007ffff5c13899 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #20 0x00007ffff2cbc28b in QObjectPrivate::deleteChildren() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #21 0x00007ffff5c136c8 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #22 0x00007ffff5d73ea9 in QStackedWidget::~QStackedWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #23 0x00007ffff2cbc28b in QObjectPrivate::deleteChildren() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #24 0x00007ffff5c136c8 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #25 0x00007ffff5d7f929 in QTabWidget::~QTabWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #26 0x00007ffff2cbc28b in QObjectPrivate::deleteChildren() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #27 0x00007ffff5c136c8 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #28 0x0000000000640b1d in MainTab::~MainTab (this=0x1450ea0, __in_chrg=<optimized out>) at /home/mturkia/source/subsurface/subsurface/desktop-widgets/tab-widgets/maintab.cpp:210 #29 0x0000000000640b6a in MainTab::~MainTab (this=0x1450ea0, __in_chrg=<optimized out>) at /home/mturkia/source/subsurface/subsurface/desktop-widgets/tab-widgets/maintab.cpp:219 #30 0x00007ffff2cbc28b in QObjectPrivate::deleteChildren() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #31 0x00007ffff5c136c8 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #32 0x00007ffff5d73ea9 in QStackedWidget::~QStackedWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #33 0x00007ffff2cbc28b in QObjectPrivate::deleteChildren() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #34 0x00007ffff5c136c8 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #35 0x00007ffff5d73759 in QSplitter::~QSplitter() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #36 0x00007ffff2cbc28b in QObjectPrivate::deleteChildren() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #37 0x00007ffff5c136c8 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #38 0x00007ffff5d73759 in QSplitter::~QSplitter() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #39 0x00007ffff2cbc28b in QObjectPrivate::deleteChildren() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #40 0x00007ffff5c136c8 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #41 0x00007ffff5c13899 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #42 0x00007ffff2cbc28b in QObjectPrivate::deleteChildren() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 #43 0x00007ffff5c136c8 in QWidget::~QWidget() () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 #44 0x0000000000599791 in MainWindow::~MainWindow (this=0xe9e2e0, __in_chrg=<optimized out>) at /home/mturkia/source/subsurface/subsurface/desktop-widgets/mainwindow.cpp:323 #45 0x00000000005997ca in MainWindow::~MainWindow (this=0xe9e2e0, __in_chrg=<optimized out>) at /home/mturkia/source/subsurface/subsurface/desktop-widgets/mainwindow.cpp:327 #46 0x00000000005957cb in exit_ui () at /home/mturkia/source/subsurface/subsurface/subsurface-desktop-helper.cpp:50 #47 0x0000000000594699 in main (argc=1, argv=0x7fffffffddb8) at /home/mturkia/source/subsurface/subsurface/subsurface-desktop-main.cpp:112
diff --git a/desktop-widgets/tableview.cpp b/desktop-widgets/tableview.cpp index 0bb5bb1..d029c18 100644 --- a/desktop-widgets/tableview.cpp +++ b/desktop-widgets/tableview.cpp @@ -67,7 +67,7 @@ TableView::~TableView() s.beginGroup(objectName()); // remove the old default bool oldDefault = (ui.tableView->columnWidth(0) == 30); - for (int i = 1; oldDefault && i < ui.tableView->model()->columnCount(); i++) { + for (int i = 1; oldDefault && ui.tableView->model() && i < ui.tableView->model()->columnCount(); i++) { if (ui.tableView->columnWidth(i) != 80) oldDefault = false; }
_______________________________________________ subsurface mailing list subsurface@subsurface-divelog.org http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface