Ticket #42545

QT client dumps core (maybe civil war) (civ2civ3, 3.0.0-beta2+ c9c390eba0)

Open Date: 2021-06-18 04:53 Last Update: 2021-11-20 23:29

Reporter:
Owner:
Type:
Status:
Closed
Component:
MileStone:
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
2

Details

I hit End Turn; I saw in the (qt) message box something about a civil war, and then the qt client disappeared with a core dump. I had the above version plus cazfi's trade-route-bonus patch and alain's more-columns-in-Nations patch.

The server seemed cool and it's console sed:

Game saved as freeciv-T0080-Y-0525-auto.sav.xz
> 
Game saved as freeciv-T0081-Y-0500-auto.sav.xz
> 
Player 'Milton Cato' now has AI skill level 'Hard'.
Game saved as freeciv-T0082-Y-0475-auto.sav.xz
> 
2: Lost connection: chippo from localhost (client disconnected) (player Petar Krešimir IV).

Reconnecting, endgames, load games, restarting server all do not repeat the core dump, but I will attach that turn 81 savegame, anyway.

Backtrace:

Core was generated by `./client/freeciv-qt'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007fa9b5fb485b in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5
[Current thread is 1 (Thread 0x7fa9b0112b40 (LWP 5728))]
(gdb) bt -full
#0  0x00007fa9b5fb485b in  () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#1  0x00007fa9b5fb4e46 in QSortFilterProxyModel::flags(QModelIndex const&) const () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007fa9b5a544db in QAbstractItemView::setCurrentIndex(QModelIndex const&) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#3  0x000055a213b986af in plr_report::update_report(bool) (this=0x7fa9980c0750, update_selection=<optimized out>)
    at ../../../../src/client/gui-qt/plrdlg.cpp:822
        qmi = {r = 14, c = 18, i = 94154743327184, m = 0x55a21932af40}
        player_count = 0
#4  0x000055a213bb3af8 in fc_sidewidget::mousePressEvent(QMouseEvent*) (this=0x55a215a97620, event=0x7fff3a87d3b0)
    at ../../../../src/client/gui-qt/sidebar.cpp:283
#5  0x00007fa9b581e5de in QWidget::event(QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#6  0x00007fa9b57db783 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#7  0x00007fa9b57e2e5b in QApplication::notify(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#8  0x00007fa9b5fea7ba in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#9  0x00007fa9b57e1e77 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#10 0x00007fa9b5838370 in  () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#11 0x00007fa9b583b615 in  () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#12 0x00007fa9b57db783 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#13 0x00007fa9b5fea7ba in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#14 0x00007fa9b63cfb13 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) ()
    at /lib/x86_64-linux-gnu/libQt5Gui.so.5
#15 0x00007fa9b63a4e2c in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
    at /lib/x86_64-linux-gnu/libQt5Gui.so.5
#16 0x00007fa9ae556a6e in  () at /lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#17 0x00007fa9b1fd58eb in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#18 0x00007fa9b2028d28 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#19 0x00007fa9b1fd3023 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#20 0x00007fa9b6044204 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
    at /lib/x86_64-linux-gnu/libQt5Core.so.5
#21 0x00007fa9b5fe911b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#22 0x00007fa9b5ff1604 in QCoreApplication::exec() () at /lib/x86_64-linux-gnu/libQt5Core.so.5
--Type <RET> for more, q to quit, c to continue without paging--
#23 0x000055a213b29511 in fc_client::fc_main(QApplication*) (this=this@entry=0x55a214f472b0, qapp=0x55a214dc8f10)
    at ../../../../src/client/gui-qt/fc_client.cpp:256
#24 0x000055a213a7a62a in qtg_ui_main(int, char**) (argc=<optimized out>, argv=0x7fff3a87de18)
    at ../../../../src/client/gui-qt/gui_main.cpp:194
        qpm = <optimized out>
        app_icon = {d = 0x55a215bf0810}
#25 0x000055a213a7c7f4 in client_main (argc=1, argv=0x7fff3a87de18) at ../../../src/client/client_main.c:685
        i = 1
        loglevel = LOG_NORMAL
        ui_options = <optimized out>
        ui_separator = <optimized out>
        option = <optimized out>
        fatal_assertions = -1
        aii = 1
        __FUNCTION__ = "client_main"
#26 0x00007fa9b5105565 in __libc_start_main (main=
    0x55a213a77f90 <main(int, char**)>, argc=1, argv=0x7fff3a87de18, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fff3a87de08) at ../csu/libc-start.c:332
        self = <optimized out>
        result = <optimized out>
        unwind_buf = 
              {cancel_jmp_buf = {{jmp_buf = {94154605786016, 2930739386275587367, 94154602813248, 0, 0, 0, -2931167166183774937, -2882451297501977305}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x1, 0x7fff3a87de18}, data = {prev = 0x0, cleanup = 0x0, canceltype = 1}}}
        not_first_call = <optimized out>
#27 0x000055a213a7976e in _start ()

Just before the core dump, I was thinking:

Civil War! I have Marco Polo's!

There was some bug regarding having Marco Polo's and the meeting of the new player. Now is a good time to see whether that bug is fixed.
But then the core dump happened. And then I remembered that the marco-new-player bug didn't cause a core dump, was resolved after another turn and was seen under gtk.

Ticket History (3/7 Histories)

2021-06-18 04:53 Updated by: chippo
  • New Ticket "QT client dumps core (maybe civil war) (civ2civ3, 3.0.0-beta2+ c9c390eba0)" created
2021-06-18 06:14 Updated by: chippo
Comment

It is repeatable. If I start afresh (even after a new git pull which compiles quite a lot - now on ac2bbfea31), start a server, load turn-81, start client and connect, play some moves, hit End Turn, see the civil war message, play some moves, click on Nations and get another core dump. I've managed to do it a few times, but can't find an exactly repeatable sequence.

It looks identical to me, but I'll include it ('cos it's so easy to do):

Core was generated by `./client/freeciv-qt'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007f728b88485e in ?? () from /lib/x86_64-linux-gnu/libQt5Core.so.5
[Current thread is 1 (Thread 0x7f72859e2b40 (LWP 126845))]
(gdb) bt -full
#0  0x00007f728b88485e in  () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#1  0x00007f728b884e46 in QSortFilterProxyModel::flags(QModelIndex const&) const () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007f728b3244db in QAbstractItemView::setCurrentIndex(QModelIndex const&) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#3  0x00005642655a66af in plr_report::update_report(bool) (this=0x56426adaf290, update_selection=<optimized out>)
    at ../../../../src/client/gui-qt/plrdlg.cpp:822
        qmi = {r = 6, c = 18, i = 94843258546976, m = 0x56426acf0040}
        player_count = 0
#4  0x00005642655c1af8 in fc_sidewidget::mousePressEvent(QMouseEvent*) (this=0x5642670d7e50, event=0x7fff5d04e930)
    at ../../../../src/client/gui-qt/sidebar.cpp:283
#5  0x00007f728b0ee5de in QWidget::event(QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#6  0x00007f728b0ab783 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#7  0x00007f728b0b2e5b in QApplication::notify(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#8  0x00007f728b8ba7ba in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#9  0x00007f728b0b1e77 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#10 0x00007f728b108370 in  () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#11 0x00007f728b10b615 in  () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#12 0x00007f728b0ab783 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
#13 0x00007f728b8ba7ba in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#14 0x00007f728bc9fb13 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) ()
    at /lib/x86_64-linux-gnu/libQt5Gui.so.5
#15 0x00007f728bc74e2c in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
    at /lib/x86_64-linux-gnu/libQt5Gui.so.5
#16 0x00007f7283e1fa6e in  () at /lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#17 0x00007f72878a58eb in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#18 0x00007f72878f8d28 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#19 0x00007f72878a3023 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#20 0x00007f728b914204 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
    at /lib/x86_64-linux-gnu/libQt5Core.so.5
#21 0x00007f728b8b911b in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /lib/x86_64-linux-gnu/libQt5Core.so.5
#22 0x00007f728b8c1604 in QCoreApplication::exec() () at /lib/x86_64-linux-gnu/libQt5Core.so.5
--Type <RET> for more, q to quit, c to continue without paging--
#23 0x0000564265537511 in fc_client::fc_main(QApplication*) (this=this@entry=0x564266586d70, qapp=0x564266408ef0)
    at ../../../../src/client/gui-qt/fc_client.cpp:256
#24 0x000056426548862a in qtg_ui_main(int, char**) (argc=<optimized out>, argv=0x7fff5d04f398)
    at ../../../../src/client/gui-qt/gui_main.cpp:194
        qpm = <optimized out>
        app_icon = {d = 0x56426722f9e0}
#25 0x000056426548a7f4 in client_main (argc=1, argv=0x7fff5d04f398) at ../../../src/client/client_main.c:685
        i = 1
        loglevel = LOG_NORMAL
        ui_options = <optimized out>
        ui_separator = <optimized out>
        option = <optimized out>
        fatal_assertions = -1
        aii = 1
        __FUNCTION__ = "client_main"
#26 0x00007f728a9d5565 in __libc_start_main (main=
    0x564265485f90 <main(int, char**)>, argc=1, argv=0x7fff5d04f398, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fff5d04f388) at ../csu/libc-start.c:332
        self = <optimized out>
        result = <optimized out>
        unwind_buf = 
              {cancel_jmp_buf = {{jmp_buf = {94843170051264, 5786756776578308431, 94843167078208, 0, 0, 0, -5787113799921641137, -5860408407642810033}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x1, 0x7fff5d04f398}, data = {prev = 0x0, cleanup = 0x0, canceltype = 1}}}
        not_first_call = <optimized out>
#27 0x000056426548776e in _start ()

(Edited, 2021-06-18 06:16 Updated by: chippo)
2021-09-22 12:08 Updated by: cazfi
Comment

I couldn't reproduce the crash, but from the backtrace it seems like it's crashing when sorting of the players dialog is automatically triggered from changes made in plr_report::update_report(). Attaching a patch (for S3_0) that I guess could help (makes sure that new player from civil war is properly included to the report before trying to sort it in inconsistent state).

2021-11-14 10:19 Updated by: cazfi
  • Resolution Update from None to Accepted
  • Milestone Update from (None) to 2.6.6 (closed)
Comment

As there has been no comments about this, I think the best course of action is to assume that the patch helps. I think it's the right thing to do, anyway, even if it really wasn't cause of this crash.

Now planning to push the patch submitted earlier. Consider review period for it started now.

2021-11-20 23:29 Updated by: cazfi
  • Status Update from Open to Closed
  • Owner Update from (None) to cazfi
  • Resolution Update from Accepted to Fixed

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login