Re: Segfault when trying to edit cylinder information - solved!
On 13-06-2017 23:48, Lubomir I. Ivanov wrote: but it's probably best for you to still upload the whole divelog @ dropbox, so that we can test with it and find the*real* cause. Lubomir: I'll try to narrow down the problem in order to create a smaller file that contains the problem... I'll keep you posted. Cheers: Pedro ___ subsurface mailing list subsurface@subsurface-divelog.org http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
Re: Segfault when trying to edit cylinder information - solved!
On 14 June 2017 at 01:31, Pedro Neveswrote: > On 13-06-2017 23:19, Lubomir I. Ivanov wrote: > > git apply test_tank_info_model_fix.patch > > Lubomir: > > After applying your patch it all works as supposed. I can edit cylinder info > without any problems. > > Thanks a lot! > thanks for checking, i've signed-off a patch with this fix, but it's probably best for you to still upload the whole divelog @ dropbox, so that we can test with it and find the *real* cause. lubomir -- ___ subsurface mailing list subsurface@subsurface-divelog.org http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
Re: Segfault when trying to edit cylinder information - solved!
On 13-06-2017 23:19, Lubomir I. Ivanov wrote: git apply test_tank_info_model_fix.patch Lubomir: After applying your patch it all works as supposed. I can edit cylinder info without any problems. Thanks a lot! Cheers: Pedro ___ subsurface mailing list subsurface@subsurface-divelog.org http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
Re: Segfault when trying to edit cylinder information
On 14 June 2017 at 01:01, Pedro Neveswrote: > On 13-06-2017 22:43, Lubomir I. Ivanov wrote: > > replace it with the following: > const int test_row = index.row(); > fprintf(stderr, "TEST_ROW: %d\n", test_row); // include if needed > struct tank_info_t *info = _info[test_row]; > > Lubomir: > > This is what I get now: > > > TEST_ROW: 100 > TEST_ROW: 101 > Segmentation fault (core dumped) > row values seem to go above 99. please try reseting the tankinfomodel.cpp changes and apply the attached patch (git apply test_tank_info_model_fix.patch) and rebuild / retest. if it works we have a "clamp" solution, but the real cause is unknown. the QModelIndex should not return row values above the maximum size of our tank_info buffer. lubomir -- diff --git a/core/dive.h b/core/dive.h index c65d3ff..2565b4a 100644 --- a/core/dive.h +++ b/core/dive.h @@ -296,6 +296,7 @@ struct divecomputer { #define MAX_CYLINDERS (20) #define MAX_WEIGHTSYSTEMS (6) +#define MAX_TANK_INFO (100) #define W_IDX_PRIMARY 0 #define W_IDX_SECONDARY 1 @@ -923,7 +924,7 @@ struct tank_info_t { const char *name; int cuft, ml, psi, bar; }; -extern struct tank_info_t tank_info[100]; +extern struct tank_info_t tank_info[MAX_TANK_INFO]; struct ws_info_t { const char *name; diff --git a/qt-models/tankinfomodel.cpp b/qt-models/tankinfomodel.cpp index 75303d8..97f0e80 100644 --- a/qt-models/tankinfomodel.cpp +++ b/qt-models/tankinfomodel.cpp @@ -28,6 +28,10 @@ bool TankInfoModel::setData(const QModelIndex , const QVariant , int { //WARN Seems wrong, we need to check for role == Qt::EditRole Q_UNUSED(role); + + if (index.row() < 0 || index.row() > MAX_TANK_INFO - 1) + return false; + struct tank_info_t *info = _info[index.row()]; switch (index.column()) { case DESCRIPTION: @@ -51,7 +55,7 @@ void TankInfoModel::clear() QVariant TankInfoModel::data(const QModelIndex , int role) const { QVariant ret; - if (!index.isValid()) { + if (!index.isValid() || index.row() < 0 || index.row() > MAX_TANK_INFO - 1) { return ret; } if (role == Qt::FontRole) { ___ subsurface mailing list subsurface@subsurface-divelog.org http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
Re: Segfault when trying to edit cylinder information
On 13-06-2017 22:43, Lubomir I. Ivanov wrote: replace it with the following: const int test_row = index.row(); fprintf(stderr, "TEST_ROW: %d\n", test_row); // include if needed struct tank_info_t *info = _info[test_row]; Lubomir: This is what I get now: TEST_ROW: 0 TEST_ROW: 0 TEST_ROW: 0 TEST_ROW: 0 TEST_ROW: 1 TEST_ROW: 2 TEST_ROW: 3 TEST_ROW: 4 TEST_ROW: 5 TEST_ROW: 6 TEST_ROW: 7 TEST_ROW: 8 TEST_ROW: 9 TEST_ROW: 10 TEST_ROW: 11 TEST_ROW: 12 TEST_ROW: 13 TEST_ROW: 14 TEST_ROW: 15 TEST_ROW: 16 TEST_ROW: 17 TEST_ROW: 18 TEST_ROW: 19 TEST_ROW: 20 TEST_ROW: 21 TEST_ROW: 22 TEST_ROW: 23 TEST_ROW: 24 TEST_ROW: 25 TEST_ROW: 26 TEST_ROW: 27 TEST_ROW: 28 TEST_ROW: 29 TEST_ROW: 30 TEST_ROW: 31 TEST_ROW: 32 TEST_ROW: 33 TEST_ROW: 34 TEST_ROW: 35 TEST_ROW: 36 TEST_ROW: 37 TEST_ROW: 38 TEST_ROW: 39 TEST_ROW: 40 TEST_ROW: 41 TEST_ROW: 42 TEST_ROW: 43 TEST_ROW: 44 TEST_ROW: 45 TEST_ROW: 46 TEST_ROW: 47 TEST_ROW: 48 TEST_ROW: 49 TEST_ROW: 50 TEST_ROW: 51 TEST_ROW: 52 TEST_ROW: 53 TEST_ROW: 54 TEST_ROW: 55 TEST_ROW: 56 TEST_ROW: 57 TEST_ROW: 58 TEST_ROW: 59 TEST_ROW: 60 TEST_ROW: 61 TEST_ROW: 62 TEST_ROW: 63 TEST_ROW: 64 TEST_ROW: 65 TEST_ROW: 66 TEST_ROW: 67 TEST_ROW: 68 TEST_ROW: 69 TEST_ROW: 70 TEST_ROW: 71 TEST_ROW: 72 TEST_ROW: 73 TEST_ROW: 74 TEST_ROW: 75 TEST_ROW: 76 TEST_ROW: 77 TEST_ROW: 78 TEST_ROW: 79 TEST_ROW: 80 TEST_ROW: 81 TEST_ROW: 82 TEST_ROW: 83 TEST_ROW: 84 TEST_ROW: 85 TEST_ROW: 86 TEST_ROW: 87 TEST_ROW: 88 TEST_ROW: 89 TEST_ROW: 90 TEST_ROW: 91 TEST_ROW: 92 TEST_ROW: 93 TEST_ROW: 94 TEST_ROW: 95 TEST_ROW: 96 TEST_ROW: 97 TEST_ROW: 98 TEST_ROW: 99 TEST_ROW: 100 TEST_ROW: 101 Segmentation fault (core dumped) Ideas? Cheers: Pedro ___ subsurface mailing list subsurface@subsurface-divelog.org http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
Re: Segfault when trying to edit cylinder information
On 13 June 2017 at 23:58, Thiago Macieirawrote: > On terça-feira, 13 de junho de 2017 13:16:21 PDT Lubomir I. Ivanov wrote: >> i cannot reproduce the problem, but also the above should not happen >> as we allocate the cylinder "type" (tank_info_t->name) on the heap and >> it's address cannot be so low (0x1770). > > It comes from: > > struct tank_info_t *info = _info[index.row()]; > > which is a global variable in core/equipment.c: > > struct tank_info_t tank_info[100] = { > ... > }; > > and has been so since 2013. I don't see how > a) tank_info could be wrong (unless it's a major compilation problem) > and > b) how index.row() could have been so exactly wrong to produce a pointer in > the second memory page (it's too much of a coincidence) hmm, both are possible. i would be bet on b) as i haven't seen anything like a) in recent GCC - not that it's bug free. lubomir -- ___ subsurface mailing list subsurface@subsurface-divelog.org http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
Re: Segfault when trying to edit cylinder information
On 14 June 2017 at 00:30, Pedro Neveswrote: > Lubomir: > > On 13-06-2017 21:16, Lubomir I. Ivanov wrote: >> >> >> random questions: >> - are you running from an app-image or is this your build? > > It happens both with my build and with the appimage it's good that you are building yourself. please, open the file qt-models/tankinfomodel.cpp and find the method: QVariant TankInfoModel::data(const QModelIndex , int role) const inside the method find this line: struct tank_info_t *info = _info[index.row()]; replace it with the following: const int test_row = index.row(); fprintf(stderr, "TEST_ROW: %d\n", test_row); // include if needed struct tank_info_t *info = _info[test_row]; rebuild subsurface and reproduce the crash, while looking for the TEST_ROW output in the terminal. something else you can do add the same fprintf() snippet for the index.row() in this method: bool TankInfoModel::setData(const QModelIndex , const QVariant , int role) if the row values are negative or larger than 99 (?) something went wrong. >> >> - which OS / subsurface version? > > > Arch Linux / Latest from master or with 4.6.4 appimage > >> - does it happen if you plan a dive and insert a new cylinder? > > Yes. even if you start subsurface with a blank logbook? > >> - can you send a file where it happens consistently + plus exact steps >> to reproduce it? > > > I've made a few more tests with other logbooks and It seems that it happens > only with my log... There must me something wrong with it. However, I'll > have to place it on a Dropbox as it's 42 Mb... Does anyone have any ideas > where I should start looking? > that's a big logfile. the size itself might contribute to the problem - e.g. memory corruption that we need to prevent. lubomir -- ___ subsurface mailing list subsurface@subsurface-divelog.org http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
Re: Segfault when trying to edit cylinder information
Lubomir: On 13-06-2017 21:16, Lubomir I. Ivanov wrote: random questions: - are you running from an app-image or is this your build? It happens both with my build and with the appimage - which OS / subsurface version? Arch Linux / Latest from master or with 4.6.4 appimage - does it happen if you plan a dive and insert a new cylinder? Yes. - can you send a file where it happens consistently + plus exact steps to reproduce it? I've made a few more tests with other logbooks and It seems that it happens only with my log... There must me something wrong with it. However, I'll have to place it on a Dropbox as it's 42 Mb... Does anyone have any ideas where I should start looking? Cheers: Pedro ___ subsurface mailing list subsurface@subsurface-divelog.org http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
Re: Segfault when trying to edit cylinder information
On terça-feira, 13 de junho de 2017 13:16:21 PDT Lubomir I. Ivanov wrote: > i cannot reproduce the problem, but also the above should not happen > as we allocate the cylinder "type" (tank_info_t->name) on the heap and > it's address cannot be so low (0x1770). It comes from: struct tank_info_t *info = _info[index.row()]; which is a global variable in core/equipment.c: struct tank_info_t tank_info[100] = { ... }; and has been so since 2013. I don't see how a) tank_info could be wrong (unless it's a major compilation problem) and b) how index.row() could have been so exactly wrong to produce a pointer in the second memory page (it's too much of a coincidence) Not to mention that index was created by QComboBox, as a result of resize operation, so even if there's another QModelIndex in the stack, it shouldn't have had an effect -- not to mention that those were also generated by Qt. -- Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org Software Architect - Intel Open Source Technology Center ___ subsurface mailing list subsurface@subsurface-divelog.org http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
Re: Segfault when trying to edit cylinder information
On 13 June 2017 at 22:38, Pedro Neveswrote: > > #0 0x7fffef3b51a6 in strlen () at /usr/lib/libc.so.6 > #1 0x005a5c33 in QString::QString(char const*) > (this=0x7fffcbd0, ch=0x1770 0x1770>) at /usr/include/qt/QtCore/qstring.h:659 > #2 0x0072e14d in TankInfoModel::data(QModelIndex const&, int) const > (this=0x10ae1f0, index=..., role=2) at > /home//Diveapps/subsurface/qt-models/tankinfomodel.cpp:76 that's very odd, i cannot reproduce the problem, but also the above should not happen as we allocate the cylinder "type" (tank_info_t->name) on the heap and it's address cannot be so low (0x1770). random questions: - are you running from an app-image or is this your build? - which OS / subsurface version? - does it happen if you plan a dive and insert a new cylinder? - can you send a file where it happens consistently + plus exact steps to reproduce it? lubomir -- ___ subsurface mailing list subsurface@subsurface-divelog.org http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
Re: Segfault when trying to edit cylinder information
On 13-06-2017 19:14, Thiago Macieira wrote: type 'bt" when you get above. Thiago, my bad ;-) (gdb) bt #0 0x7fffef3b51a6 in strlen () at /usr/lib/libc.so.6 #1 0x005a5c33 in QString::QString(char const*) (this=0x7fffcbd0, ch=0x1770 0x1770>) at /usr/include/qt/QtCore/qstring.h:659 #2 0x0072e14d in TankInfoModel::data(QModelIndex const&, int) const (this=0x10ae1f0, index=..., role=2) at /home//Diveapps/subsurface/qt-models/tankinfomodel.cpp:76 #3 0x73ae4e3d in () at /usr/lib/libQt5Widgets.so.5 #4 0x73ae5b99 in QComboBox::itemText(int) const () at /usr/lib/libQt5Widgets.so.5 #5 0x73ae61b1 in () at /usr/lib/libQt5Widgets.so.5 #6 0x73a1f67d in QWidgetPrivate::adjustedSize() const () at /usr/lib/libQt5Widgets.so.5 #7 0x73a2e16a in QWidget::adjustSize() () at /usr/lib/libQt5Widgets.so.5 #8 0x73aea24d in QComboBox::setEditable(bool) () at /usr/lib/libQt5Widgets.so.5 #9 0x006c0276 in ComboBoxDelegate::createEditor(QWidget*, QStyleOptionViewItem const&, QModelIndex const&) const (this=0x10ae1a0, parent=0x11eafa0, option=..., index=...) at /home/xxx/Diveapps/subsurface/desktop-widgets/modeldelegates.cpp:118 #10 0x006c162a in TankInfoDelegate::createEditor(QWidget*, QStyleOptionViewItem const&, QModelIndex const&) const (this=0x10ae1a0, parent=0x11eafa0, option=..., index=...) at /home/xx/Diveapps/subsurface/desktop-widgets/modeldelegates.cpp:302 #11 0x73c3eb90 in () at /usr/lib/libQt5Widgets.so.5 #12 0x73c3ed98 in () at /usr/lib/libQt5Widgets.so.5 #13 0x73c3efba in QAbstractItemView::edit(QModelIndex const&, QAbstractItemView::EditTrigger, QEvent*) () at /usr/lib/libQt5Widgets.so.5 #14 0x73c37b78 in QAbstractItemView::edit(QModelIndex const&) () at /usr/lib/libQt5Widgets.so.5 #15 0x006c5df4 in TableView::edit(QModelIndex const&) (this=0x137f4d0, index=...) at /home/xxx/Diveapps/subsurface/desktop-widgets/tableview.cpp:134 #16 0x006622ba in MainTab::editCylinderWidget(QModelIndex const&) (this=0x10c71d0, index=...) at /home/x/Diveapps/subsurface/desktop-widgets/tab-widgets/maintab.cpp:1460 #17 0x0068c184 in MainTab::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x10c71d0, _c=QMetaObject::InvokeMetaMethod, _id=29, _a=0x7fffd420) at /home/x/Diveapps/subsurface/build/desktop-widgets/subsurface_interface_autogen/VKEPO7FSIR/moc_maintab.cpp:281 #18 0x7fffeff2c465 in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/libQt5Core.so.5 #19 0x73c36f35 in QAbstractItemView::clicked(QModelIndex const&) () at /usr/lib/libQt5Widgets.so.5 #20 0x73c3a03b in QAbstractItemView::mouseReleaseEvent(QMouseEvent*) () at /usr/lib/libQt5Widgets.so.5 #21 0x73a31d68 in QWidget::event(QEvent*) () at /usr/lib/libQt5Widgets.so.5 #22 0x73b112de in QFrame::event(QEvent*) () at /usr/lib/libQt5Widgets.so.5 #23 0x73c42e6b in QAbstractItemView::viewportEvent(QEvent*) () at /usr/lib/libQt5Widgets.so.5 #24 0x7fffefefd87c in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () at /usr/lib/libQt5Core.so.5 #25 0x739f1445 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5 #26 0x739f924f in QApplication::notify(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5 #27 0x7fffefefdb98 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/libQt5Core.so.5 #28 0x739f8222 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer&, bool) () at /usr/lib/libQt5Widgets.so.5 #29 0x73a4c8db in () at /usr/lib/libQt5Widgets.so.5 #30 0x73a4ef4a in () at /usr/lib/libQt5Widgets.so.5 #31 0x739f146c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5 #32 0x739f8cf4 in QApplication::notify(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5 #33 0x7fffefefdb98 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/libQt5Core.so.5 #34 0x7073ea93 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () at /usr/lib/libQt5Gui.so.5 #35 0x70740575 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () at /usr/lib/libQt5Gui.so.5 #36 0x70718c0b in QWindowSystemInterface::sendWindowSystemEvents(QFlags) () at /usr/lib/libQt5Gui.so.5 #37 0x7fffe30ee1b0 in () at /usr/lib/libQt5XcbQpa.so.5 #38 0x7fffeb70ba47 in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0 #39 0x7fffeb70bc78 in () at /usr/lib/libglib-2.0.so.0 #40 0x7fffeb70bd0c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0 #41 0x7fffeff55e7f in QEventDispatcherGlib::processEvents(QFlags) () at
Segfault when trying to edit cylinder information
Hi all: I've been facing a segfault with Subsurface each time I try to insert cylinder information of my dives. After I download my new dives, I'm able to fill the Start press., End press, the Work press. and the O2%. But when I click the Type or Size, I get a segfault. This happens both with my log and with an empty divelog. Even if I delete Subsurface configs (in .config/Subsurface). Here's what I get with gdb: (gdb) run Starting program: /home/xx/Diveapps/subsurface/build/subsurface subsurface/build/subsurface [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/libthread_db.so.1". [New Thread 0x7fffe02f2700 (LWP 22165)] [New Thread 0x7fffd3768700 (LWP 22166)] [New Thread 0x7fffcbbc6700 (LWP 22167)] [New Thread 0x7fffcad25700 (LWP 22168)] [New Thread 0x7fffca524700 (LWP 22169)] [Thread 0x7fffcad25700 (LWP 22168) exited] [New Thread 0x7fffcad25700 (LWP 22170)] [Thread 0x7fffca524700 (LWP 22169) exited] [New Thread 0x7fffca524700 (LWP 22171)] [New Thread 0x7fffcad25700 (LWP 22172)] [Thread 0x7fffcad25700 (LWP 22170) exited] [Thread 0x7fffca524700 (LWP 22171) exited] [Thread 0x7fffcad25700 (LWP 22172) exited] [New Thread 0x7fffcad25700 (LWP 22173)] [New Thread 0x7fffca524700 (LWP 22174)] [New Thread 0x7fffc2ea5700 (LWP 22175)] [New Thread 0x7fffc26a4700 (LWP 22176)] [New Thread 0x7fffc1ea3700 (LWP 22177)] subsurface/build/subsurface:1: parser error : Start tag expected, '<' not found ELF ^ subsurface/build/subsurface:1: parser error : Start tag expected, '<' not found ELF ^ [New Thread 0x7fffc0861700 (LWP 22178)] [New Thread 0x7fff7bffd700 (LWP 22179)] [New Thread 0x7fff7aee7700 (LWP 22180)] [New Thread 0x7fff7a6e6700 (LWP 22181)] [New Thread 0x7fff79ee5700 (LWP 22182)] [New Thread 0x7fff796e4700 (LWP 22183)] [Thread 0x7fff79ee5700 (LWP 22182) exited] [Thread 0x7fff796e4700 (LWP 22183) exited] [Thread 0x7fff7a6e6700 (LWP 22181) exited] [Thread 0x7fff7aee7700 (LWP 22180) exited] [New Thread 0x7fff796e4700 (LWP 22184)] [New Thread 0x7fff79ee5700 (LWP 22185)] [New Thread 0x7fff7a6e6700 (LWP 22186)] [New Thread 0x7fff7aee7700 (LWP 22187)] [New Thread 0x7fff78cdd700 (LWP 22188)] [New Thread 0x7fff53fff700 (LWP 22189)] [Thread 0x7fff7aee7700 (LWP 22187) exited] [Thread 0x7fff78cdd700 (LWP 22188) exited] [Thread 0x7fff7a6e6700 (LWP 22186) exited] [Thread 0x7fff53fff700 (LWP 22189) exited] [New Thread 0x7fff53fff700 (LWP 22190)] [New Thread 0x7fff78cdd700 (LWP 22191)] [New Thread 0x7fff7aee7700 (LWP 22192)] [New Thread 0x7fff7a6e6700 (LWP 22193)] [Thread 0x7fff53fff700 (LWP 22190) exited] [Thread 0x7fff78cdd700 (LWP 22191) exited] [Thread 0x7fff7aee7700 (LWP 22192) exited] [Thread 0x7fff7a6e6700 (LWP 22193) exited] [New Thread 0x7fff7a6e6700 (LWP 22194)] [New Thread 0x7fff7aee7700 (LWP 22195)] [New Thread 0x7fff78cdd700 (LWP 22196)] [New Thread 0x7fff53fff700 (LWP 22197)] [Thread 0x7fff7aee7700 (LWP 22195) exited] [Thread 0x7fff7a6e6700 (LWP 22194) exited] [Thread 0x7fff78cdd700 (LWP 22196) exited] [Thread 0x7fff53fff700 (LWP 22197) exited] [New Thread 0x7fff53fff700 (LWP 22198)] [New Thread 0x7fff78cdd700 (LWP 22199)] [New Thread 0x7fff7aee7700 (LWP 22200)] [New Thread 0x7fff7a6e6700 (LWP 22201)] [Thread 0x7fff7aee7700 (LWP 22200) exited] [Thread 0x7fff7a6e6700 (LWP 22201) exited] [Thread 0x7fff78cdd700 (LWP 22199) exited] [Thread 0x7fff53fff700 (LWP 22198) exited] [New Thread 0x7fff7a6e6700 (LWP 22204)] [New Thread 0x7fff7aee7700 (LWP 22205)] [New Thread 0x7fff78cdd700 (LWP 22206)] [New Thread 0x7fff53fff700 (LWP 22207)] [Thread 0x7fff7aee7700 (LWP 22205) exited] [Thread 0x7fff7a6e6700 (LWP 22204) exited] [Thread 0x7fff78cdd700 (LWP 22206) exited] [Thread 0x7fff53fff700 (LWP 22207) exited] [New Thread 0x7fff53fff700 (LWP 22212)] [New Thread 0x7fff78cdd700 (LWP 22213)] [New Thread 0x7fff7aee7700 (LWP 22214)] [New Thread 0x7fff7a6e6700 (LWP 22215)] [New Thread 0x7fff5211e700 (LWP 22218)] [New Thread 0x7fff5191d700 (LWP 22219)] [New Thread 0x7fff5111c700 (LWP 0)] [New Thread 0x7fff5091b700 (LWP 1)] [Thread 0x7fff5191d700 (LWP 22219) exited] [Thread 0x7fff5091b700 (LWP 1) exited] [Thread 0x7fff5111c700 (LWP 0) exited] [Thread 0x7fff5211e700 (LWP 22218) exited] [New Thread 0x7fff5091b700 (LWP 2)] [New Thread 0x7fff5111c700 (LWP 3)] [New Thread 0x7fff5191d700 (LWP 4)] [New Thread 0x7fff5211e700 (LWP 5)] [Thread 0x7fff5211e700 (LWP 5) exited] [Thread 0x7fff5191d700 (LWP 4) exited] [Thread 0x7fff5111c700 (LWP 3) exited] [Thread 0x7fff5091b700 (LWP 2) exited] [New Thread 0x7fff5211e700 (LWP 6)] [New Thread 0x7fff5191d700 (LWP 7)] [New Thread 0x7fff5111c700 (LWP 8)] [New Thread 0x7fff5091b700 (LWP 9)] [Thread 0x7fff5191d700 (LWP 7) exited] [Thread 0x7fff5211e700 (LWP 6) exited] [Thread 0x7fff5111c700 (LWP 8) exited] [Thread 0x7fff5091b700 (LWP 9) exited] [New Thread 0x7fff5091b700 (LWP 22230)] [New Thread 0x7fff5111c700 (LWP 22231)] [New Thread 0x7fff5191d700 (LWP 22232)] [New Thread