Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crashes all throughout the application when destroying channel objects on macOS #4347

Closed
4 tasks done
LosFarmosCTL opened this issue Jan 31, 2023 · 7 comments
Closed
4 tasks done

Comments

@LosFarmosCTL
Copy link
Contributor

LosFarmosCTL commented Jan 31, 2023

Checklist

  • I'm reporting a problem with Chatterino
  • I've verified that I'm running the most recent nightly build or stable release
  • I've looked for my problem on the wiki
  • I've searched the issues and pull requests for similar looking reports

Describe your issue

This has been introduced by #4147, cannot reproduce on 56f7c91

All throughout chatterino the program will SIGABRT in various places, seemingly connected to destroying channel objects.

Places where I can confirm those crashes:

Closing a usercard (Changing the 'Automatically close user popup when it loses focus' setting does not have any effect)

Backtrace
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
  * frame #0: 0x00007ff815ac000e libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x00007ff815af61ff libsystem_pthread.dylib`pthread_kill + 263
    frame #2: 0x00007ff815a41d24 libsystem_c.dylib`abort + 123
    frame #3: 0x00007ff815ab2082 libc++abi.dylib`abort_message + 241
    frame #4: 0x00007ff815aa31a5 libc++abi.dylib`demangling_terminate_handler() + 242
    frame #5: 0x00007ff81599fe19 libobjc.A.dylib`_objc_terminate() + 104
    frame #6: 0x00007ff815ab14a7 libc++abi.dylib`std::__terminate(void (*)()) + 8
    frame #7: 0x00007ff815ab1458 libc++abi.dylib`std::terminate() + 56
    frame #8: 0x00000001000093cb chatterino`__clang_call_terminate + 11
    frame #9: 0x00000001000e3058 chatterino`chatterino::Channel::~Channel(this=0x000000010aa9b418) at Channel.cpp:38:1
    frame #10: 0x00000001009619db chatterino`chatterino::TwitchChannel::~TwitchChannel(this=0x000000010aa9b418) at TwitchChannel.hpp:64:7
    frame #11: 0x000000010095ba85 chatterino`chatterino::TwitchChannel::~TwitchChannel(this=0x000000010aa9b418) at TwitchChannel.hpp:64:7
    frame #12: 0x0000000100d66a15 chatterino`void std::__1::destroy_at<chatterino::TwitchChannel>(__loc=0x000000010aa9b418) at construct_at.h:50:13
    frame #13: 0x0000000100d669f9 chatterino`void std::__1::allocator_traits<std::__1::allocator<chatterino::TwitchChannel>>::destroy<chatterino::TwitchChannel, void, void>((null)=0x00007ff7bfef5b80, __p=0x000000010aa9b418) at allocator_traits.h:317:9
    frame #14: 0x0000000100d6683e chatterino`std::__1::__shared_ptr_emplace<chatterino::TwitchChannel, std::__1::allocator<chatterino::TwitchChannel>>::__on_zero_shared(this=0x000000010aa9b400) at shared_ptr.h:313:9
    frame #15: 0x000000010000bb11 chatterino`std::__1::__shared_count::__release_shared(this=0x000000010aa9b400) at shared_ptr.h:177:9
    frame #16: 0x000000010000bab9 chatterino`std::__1::__shared_weak_count::__release_shared(this=0x000000010aa9b400) at shared_ptr.h:219:27
    frame #17: 0x000000010000ba8c chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBodyBase>::~shared_ptr(this=0x000000010a9f3a70) at shared_ptr.h:959:19
    frame #18: 0x000000010000b6b5 chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBodyBase>::~shared_ptr(this=0x000000010a9f3a70) at shared_ptr.h:957:1
    frame #19: 0x0000000100019f00 chatterino`chatterino::ChannelView::~ChannelView(this=0x000000010a9f3600) at ChannelView.hpp:64:7
    frame #20: 0x0000000100013695 chatterino`chatterino::ChannelView::~ChannelView(this=0x000000010a9f3600) at ChannelView.hpp:64:7
    frame #21: 0x00000001000136b9 chatterino`chatterino::ChannelView::~ChannelView(this=0x000000010a9f3600) at ChannelView.hpp:64:7
    frame #22: 0x0000000109865c41 QtCore`QObjectPrivate::deleteChildren() + 289
    frame #23: 0x0000000108512a34 QtWidgets`QWidget::~QWidget() + 1108
    frame #24: 0x000000010851327e QtWidgets`QWidget::~QWidget() + 14
    frame #25: 0x0000000109865c41 QtCore`QObjectPrivate::deleteChildren() + 289
    frame #26: 0x0000000108512a34 QtWidgets`QWidget::~QWidget() + 1108
    frame #27: 0x0000000100014c65 chatterino`chatterino::BaseWidget::~BaseWidget(this=0x00000001267147c0) at BaseWidget.hpp:14:7
    frame #28: 0x0000000100c53e75 chatterino`chatterino::BaseWindow::~BaseWindow(this=0x00000001267147c0) at BaseWindow.cpp:93:1
    frame #29: 0x0000000100016478 chatterino`chatterino::DraggablePopup::~DraggablePopup(this=0x00000001267147c0) at DraggablePopup.hpp:12:7
    frame #30: 0x0000000100019729 chatterino`chatterino::UserInfoPopup::~UserInfoPopup(this=0x00000001267147c0) at UserInfoPopup.hpp:20:7
    frame #31: 0x0000000100013575 chatterino`chatterino::UserInfoPopup::~UserInfoPopup(this=0x00000001267147c0) at UserInfoPopup.hpp:20:7
    frame #32: 0x0000000100013599 chatterino`chatterino::UserInfoPopup::~UserInfoPopup(this=0x00000001267147c0) at UserInfoPopup.hpp:20:7
    frame #33: 0x0000000109866590 QtCore`QObject::event(QEvent*) + 800
    frame #34: 0x0000000108524505 QtWidgets`QWidget::event(QEvent*) + 4677
    frame #35: 0x0000000100c54c60 chatterino`chatterino::BaseWindow::event(this=0x00000001267147c0, event=0x000060000051f220) at BaseWindow.cpp:333:21
    frame #36: 0x00000001084e7886 QtWidgets`QApplicationPrivate::notify_helper(QObject*, QEvent*) + 262
    frame #37: 0x00000001084e8c0d QtWidgets`QApplication::notify(QObject*, QEvent*) + 477
    frame #38: 0x000000010983cd67 QtCore`QCoreApplication::notifyInternal2(QObject*, QEvent*) + 167
    frame #39: 0x000000010983e0b9 QtCore`QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) + 1353
    frame #40: 0x000000010df2baf8 libqcocoa.dylib`___lldb_unnamed_symbol2621 + 312
    frame #41: 0x000000010df2c218 libqcocoa.dylib`___lldb_unnamed_symbol2633 + 40
    frame #42: 0x00007ff815bbd17b CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    frame #43: 0x00007ff815bbd0e3 CoreFoundation`__CFRunLoopDoSource0 + 180
    frame #44: 0x00007ff815bbce5d CoreFoundation`__CFRunLoopDoSources0 + 242
    frame #45: 0x00007ff815bbb878 CoreFoundation`__CFRunLoopRun + 892
    frame #46: 0x00007ff815bbae3c CoreFoundation`CFRunLoopRunSpecific + 562
    frame #47: 0x00007ff81e86a5e6 HIToolbox`RunCurrentEventLoopInMode + 292
    frame #48: 0x00007ff81e86a213 HIToolbox`ReceiveNextEventCommon + 283
    frame #49: 0x00007ff81e86a0e5 HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 70
    frame #50: 0x00007ff8185f4fad AppKit`_DPSNextEvent + 927
    frame #51: 0x00007ff8185f366a AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1394
    frame #52: 0x00007ff8185e5d19 AppKit`-[NSApplication run] + 586
    frame #53: 0x000000010df2aef3 libqcocoa.dylib`___lldb_unnamed_symbol2613 + 2211
    frame #54: 0x0000000109839336 QtCore`QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 502
    frame #55: 0x000000010983d302 QtCore`QCoreApplication::exec() + 130
    frame #56: 0x0000000100024f75 chatterino`chatterino::Application::run(this=0x00007ff7bfef8068, qtApp=0x00007ff7bfef8398) at Application.cpp:229:12
    frame #57: 0x00000001000cce27 chatterino`chatterino::runGui(a=0x00007ff7bfef8398, paths=0x0000600001702540, settings=0x00007ff7bfef83b8) at RunGui.cpp:246:9
    frame #58: 0x00000001000091fd chatterino`main(argc=3, argv=0x00007ff7bfeff750) at main.cpp:89:9
    frame #59: 0x0000000107cc552e dyld`start + 462

Closing a split

Backtrace
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
  * frame #0: 0x00007ff815ac000e libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x00007ff815af61ff libsystem_pthread.dylib`pthread_kill + 263
    frame #2: 0x00007ff815a41d24 libsystem_c.dylib`abort + 123
    frame #3: 0x00007ff815ab2082 libc++abi.dylib`abort_message + 241
    frame #4: 0x00007ff815aa31a5 libc++abi.dylib`demangling_terminate_handler() + 242
    frame #5: 0x00007ff81599fe19 libobjc.A.dylib`_objc_terminate() + 104
    frame #6: 0x00007ff815ab14a7 libc++abi.dylib`std::__terminate(void (*)()) + 8
    frame #7: 0x00007ff815ab1458 libc++abi.dylib`std::terminate() + 56
    frame #8: 0x00000001000093cb chatterino`__clang_call_terminate + 11
    frame #9: 0x00000001000e3058 chatterino`chatterino::Channel::~Channel(this=0x000000010b849200) at Channel.cpp:38:1
    frame #10: 0x00000001009619db chatterino`chatterino::TwitchChannel::~TwitchChannel(this=0x000000010b849200) at TwitchChannel.hpp:64:7
    frame #11: 0x000000010095ba85 chatterino`chatterino::TwitchChannel::~TwitchChannel(this=0x000000010b849200) at TwitchChannel.hpp:64:7
    frame #12: 0x000000010095baa9 chatterino`chatterino::TwitchChannel::~TwitchChannel(this=0x000000010b849200) at TwitchChannel.hpp:64:7
    frame #13: 0x00000001009d8e4c chatterino`std::__1::default_delete<chatterino::TwitchChannel>::operator(this=0x000060000028be78, __ptr=0x000000010b849200)(chatterino::TwitchChannel*) const at unique_ptr.h:57:5
    frame #14: 0x00000001009d8b7a chatterino`std::__1::__shared_ptr_pointer<chatterino::TwitchChannel*, std::__1::shared_ptr<chatterino::TwitchChannel>::__shared_ptr_default_delete<chatterino::TwitchChannel, chatterino::TwitchChannel>, std::__1::allocator<chatterino::TwitchChannel>>::__on_zero_shared(this=0x000060000028be60) at shared_ptr.h:267:5
    frame #15: 0x000000010000bb11 chatterino`std::__1::__shared_count::__release_shared(this=0x000060000028be60) at shared_ptr.h:177:9
    frame #16: 0x000000010000bab9 chatterino`std::__1::__shared_weak_count::__release_shared(this=0x000060000028be60) at shared_ptr.h:219:27
    frame #17: 0x000000010000ba8c chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBodyBase>::~shared_ptr(this=0x000000010a099c70) at shared_ptr.h:959:19
    frame #18: 0x000000010000b6b5 chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBodyBase>::~shared_ptr(this=0x000000010a099c70) at shared_ptr.h:957:1
    frame #19: 0x0000000100019f00 chatterino`chatterino::ChannelView::~ChannelView(this=0x000000010a099800) at ChannelView.hpp:64:7
    frame #20: 0x0000000100013695 chatterino`chatterino::ChannelView::~ChannelView(this=0x000000010a099800) at ChannelView.hpp:64:7
    frame #21: 0x00000001000136b9 chatterino`chatterino::ChannelView::~ChannelView(this=0x000000010a099800) at ChannelView.hpp:64:7
    frame #22: 0x0000000109865c41 QtCore`QObjectPrivate::deleteChildren() + 289
    frame #23: 0x0000000108512a34 QtWidgets`QWidget::~QWidget() + 1108
    frame #24: 0x0000000100014c65 chatterino`chatterino::BaseWidget::~BaseWidget(this=0x000000010a08ca00) at BaseWidget.hpp:14:7
    frame #25: 0x000000010107fed8 chatterino`chatterino::Split::~Split(this=0x000000010a08ca00) at Split.cpp:594:1
    frame #26: 0x000000010107ffe5 chatterino`chatterino::Split::~Split(this=0x000000010a08ca00) at Split.cpp:589:1
    frame #27: 0x0000000101080029 chatterino`chatterino::Split::~Split(this=0x000000010a08ca00) at Split.cpp:589:1
    frame #28: 0x0000000109866590 QtCore`QObject::event(QEvent*) + 800
    frame #29: 0x0000000108524505 QtWidgets`QWidget::event(QEvent*) + 4677
    frame #30: 0x00000001084e7886 QtWidgets`QApplicationPrivate::notify_helper(QObject*, QEvent*) + 262
    frame #31: 0x00000001084e8c0d QtWidgets`QApplication::notify(QObject*, QEvent*) + 477
    frame #32: 0x000000010983cd67 QtCore`QCoreApplication::notifyInternal2(QObject*, QEvent*) + 167
    frame #33: 0x000000010983e0b9 QtCore`QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) + 1353
    frame #34: 0x000000010b22daf8 libqcocoa.dylib`___lldb_unnamed_symbol2621 + 312
    frame #35: 0x000000010b22e218 libqcocoa.dylib`___lldb_unnamed_symbol2633 + 40
    frame #36: 0x00007ff815bbd17b CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    frame #37: 0x00007ff815bbd0e3 CoreFoundation`__CFRunLoopDoSource0 + 180
    frame #38: 0x00007ff815bbce5d CoreFoundation`__CFRunLoopDoSources0 + 242
    frame #39: 0x00007ff815bbb878 CoreFoundation`__CFRunLoopRun + 892
    frame #40: 0x00007ff815bbae3c CoreFoundation`CFRunLoopRunSpecific + 562
    frame #41: 0x00007ff81e86a5e6 HIToolbox`RunCurrentEventLoopInMode + 292
    frame #42: 0x00007ff81e86a213 HIToolbox`ReceiveNextEventCommon + 283
    frame #43: 0x00007ff81e86a0e5 HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 70
    frame #44: 0x00007ff8185f4fad AppKit`_DPSNextEvent + 927
    frame #45: 0x00007ff8185f366a AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1394
    frame #46: 0x00007ff8185e5d19 AppKit`-[NSApplication run] + 586
    frame #47: 0x000000010b22cef3 libqcocoa.dylib`___lldb_unnamed_symbol2613 + 2211
    frame #48: 0x0000000109839336 QtCore`QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 502
    frame #49: 0x000000010983d302 QtCore`QCoreApplication::exec() + 130
    frame #50: 0x0000000100024f75 chatterino`chatterino::Application::run(this=0x00007ff7bfef8068, qtApp=0x00007ff7bfef8398) at Application.cpp:229:12
    frame #51: 0x00000001000cce27 chatterino`chatterino::runGui(a=0x00007ff7bfef8398, paths=0x0000600001735500, settings=0x00007ff7bfef83b8) at RunGui.cpp:246:9
    frame #52: 0x00000001000091fd chatterino`main(argc=3, argv=0x00007ff7bfeff750) at main.cpp:89:9
    frame #53: 0x0000000107cc552e dyld`start + 462

Closing a tab

Backtrace
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
  * frame #0: 0x00007ff815ac000e libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x00007ff815af61ff libsystem_pthread.dylib`pthread_kill + 263
    frame #2: 0x00007ff815a41d24 libsystem_c.dylib`abort + 123
    frame #3: 0x00007ff815ab2082 libc++abi.dylib`abort_message + 241
    frame #4: 0x00007ff815aa31a5 libc++abi.dylib`demangling_terminate_handler() + 242
    frame #5: 0x00007ff81599fe19 libobjc.A.dylib`_objc_terminate() + 104
    frame #6: 0x00007ff815ab14a7 libc++abi.dylib`std::__terminate(void (*)()) + 8
    frame #7: 0x00007ff815ab1458 libc++abi.dylib`std::terminate() + 56
    frame #8: 0x00000001000093cb chatterino`__clang_call_terminate + 11
    frame #9: 0x00000001000e3058 chatterino`chatterino::Channel::~Channel(this=0x000000010b0cce00) at Channel.cpp:38:1
    frame #10: 0x00000001009619db chatterino`chatterino::TwitchChannel::~TwitchChannel(this=0x000000010b0cce00) at TwitchChannel.hpp:64:7
    frame #11: 0x000000010095ba85 chatterino`chatterino::TwitchChannel::~TwitchChannel(this=0x000000010b0cce00) at TwitchChannel.hpp:64:7
    frame #12: 0x000000010095baa9 chatterino`chatterino::TwitchChannel::~TwitchChannel(this=0x000000010b0cce00) at TwitchChannel.hpp:64:7
    frame #13: 0x00000001009d8e4c chatterino`std::__1::default_delete<chatterino::TwitchChannel>::operator(this=0x000060000028b078, __ptr=0x000000010b0cce00)(chatterino::TwitchChannel*) const at unique_ptr.h:57:5
    frame #14: 0x00000001009d8b7a chatterino`std::__1::__shared_ptr_pointer<chatterino::TwitchChannel*, std::__1::shared_ptr<chatterino::TwitchChannel>::__shared_ptr_default_delete<chatterino::TwitchChannel, chatterino::TwitchChannel>, std::__1::allocator<chatterino::TwitchChannel>>::__on_zero_shared(this=0x000060000028b060) at shared_ptr.h:267:5
    frame #15: 0x000000010000bb11 chatterino`std::__1::__shared_count::__release_shared(this=0x000060000028b060) at shared_ptr.h:177:9
    frame #16: 0x000000010000bab9 chatterino`std::__1::__shared_weak_count::__release_shared(this=0x000060000028b060) at shared_ptr.h:219:27
    frame #17: 0x000000010000ba8c chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBodyBase>::~shared_ptr(this=0x000000010b0b8870) at shared_ptr.h:959:19
    frame #18: 0x000000010000b6b5 chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBodyBase>::~shared_ptr(this=0x000000010b0b8870) at shared_ptr.h:957:1
    frame #19: 0x0000000100019f00 chatterino`chatterino::ChannelView::~ChannelView(this=0x000000010b0b8400) at ChannelView.hpp:64:7
    frame #20: 0x0000000100013695 chatterino`chatterino::ChannelView::~ChannelView(this=0x000000010b0b8400) at ChannelView.hpp:64:7
    frame #21: 0x00000001000136b9 chatterino`chatterino::ChannelView::~ChannelView(this=0x000000010b0b8400) at ChannelView.hpp:64:7
    frame #22: 0x0000000109865c41 QtCore`QObjectPrivate::deleteChildren() + 289
    frame #23: 0x0000000108512a34 QtWidgets`QWidget::~QWidget() + 1108
    frame #24: 0x0000000100014c65 chatterino`chatterino::BaseWidget::~BaseWidget(this=0x000000010b0a4e00) at BaseWidget.hpp:14:7
    frame #25: 0x000000010107fed8 chatterino`chatterino::Split::~Split(this=0x000000010b0a4e00) at Split.cpp:594:1
    frame #26: 0x000000010107ffe5 chatterino`chatterino::Split::~Split(this=0x000000010b0a4e00) at Split.cpp:589:1
    frame #27: 0x0000000101080029 chatterino`chatterino::Split::~Split(this=0x000000010b0a4e00) at Split.cpp:589:1
    frame #28: 0x0000000109865c41 QtCore`QObjectPrivate::deleteChildren() + 289
    frame #29: 0x0000000108512a34 QtWidgets`QWidget::~QWidget() + 1108
    frame #30: 0x0000000100014c65 chatterino`chatterino::BaseWidget::~BaseWidget(this=0x000000010d53b350) at BaseWidget.hpp:14:7
    frame #31: 0x000000010001d559 chatterino`chatterino::SplitContainer::~SplitContainer(this=0x000000010d53b350) at SplitContainer.hpp:31:7
    frame #32: 0x0000000100013d75 chatterino`chatterino::SplitContainer::~SplitContainer(this=0x000000010d53b350) at SplitContainer.hpp:31:7
    frame #33: 0x0000000100013d99 chatterino`chatterino::SplitContainer::~SplitContainer(this=0x000000010d53b350) at SplitContainer.hpp:31:7
    frame #34: 0x0000000109866590 QtCore`QObject::event(QEvent*) + 800
    frame #35: 0x0000000108524505 QtWidgets`QWidget::event(QEvent*) + 4677
    frame #36: 0x00000001084e7886 QtWidgets`QApplicationPrivate::notify_helper(QObject*, QEvent*) + 262
    frame #37: 0x00000001084e8c0d QtWidgets`QApplication::notify(QObject*, QEvent*) + 477
    frame #38: 0x000000010983cd67 QtCore`QCoreApplication::notifyInternal2(QObject*, QEvent*) + 167
    frame #39: 0x000000010983e0b9 QtCore`QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) + 1353
    frame #40: 0x000000010d72daf8 libqcocoa.dylib`___lldb_unnamed_symbol2621 + 312
    frame #41: 0x000000010d72e218 libqcocoa.dylib`___lldb_unnamed_symbol2633 + 40
    frame #42: 0x00007ff815bbd17b CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    frame #43: 0x00007ff815bbd0e3 CoreFoundation`__CFRunLoopDoSource0 + 180
    frame #44: 0x00007ff815bbce5d CoreFoundation`__CFRunLoopDoSources0 + 242
    frame #45: 0x00007ff815bbb878 CoreFoundation`__CFRunLoopRun + 892
    frame #46: 0x00007ff815bbae3c CoreFoundation`CFRunLoopRunSpecific + 562
    frame #47: 0x00007ff81e86a5e6 HIToolbox`RunCurrentEventLoopInMode + 292
    frame #48: 0x00007ff81e86a34a HIToolbox`ReceiveNextEventCommon + 594
    frame #49: 0x00007ff81e86a0e5 HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 70
    frame #50: 0x00007ff8185f4fad AppKit`_DPSNextEvent + 927
    frame #51: 0x00007ff8185f366a AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1394
    frame #52: 0x00007ff8185e5d19 AppKit`-[NSApplication run] + 586
    frame #53: 0x000000010d72cef3 libqcocoa.dylib`___lldb_unnamed_symbol2613 + 2211
    frame #54: 0x0000000109839336 QtCore`QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 502
    frame #55: 0x000000010983d302 QtCore`QCoreApplication::exec() + 130
    frame #56: 0x0000000100024f75 chatterino`chatterino::Application::run(this=0x00007ff7bfef8068, qtApp=0x00007ff7bfef8398) at Application.cpp:229:12
    frame #57: 0x00000001000cce27 chatterino`chatterino::runGui(a=0x00007ff7bfef8398, paths=0x000060000171d480, settings=0x00007ff7bfef83b8) at RunGui.cpp:246:9
    frame #58: 0x00000001000091fd chatterino`main(argc=3, argv=0x00007ff7bfeff750) at main.cpp:89:9
    frame #59: 0x0000000107cc552e dyld`start + 462

Switching the channel of a split

Backtrace
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
  * frame #0: 0x00007ff815ac000e libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x00007ff815af61ff libsystem_pthread.dylib`pthread_kill + 263
    frame #2: 0x00007ff815a41d24 libsystem_c.dylib`abort + 123
    frame #3: 0x00007ff815ab2082 libc++abi.dylib`abort_message + 241
    frame #4: 0x00007ff815aa31a5 libc++abi.dylib`demangling_terminate_handler() + 242
    frame #5: 0x00007ff81599fe19 libobjc.A.dylib`_objc_terminate() + 104
    frame #6: 0x00007ff815ab14a7 libc++abi.dylib`std::__terminate(void (*)()) + 8
    frame #7: 0x00007ff815ab1458 libc++abi.dylib`std::terminate() + 56
    frame #8: 0x00000001000093cb chatterino`__clang_call_terminate + 11
    frame #9: 0x00000001000e3058 chatterino`chatterino::Channel::~Channel(this=0x000000010a089200) at Channel.cpp:38:1
    frame #10: 0x00000001009619db chatterino`chatterino::TwitchChannel::~TwitchChannel(this=0x000000010a089200) at TwitchChannel.hpp:64:7
    frame #11: 0x000000010095ba85 chatterino`chatterino::TwitchChannel::~TwitchChannel(this=0x000000010a089200) at TwitchChannel.hpp:64:7
    frame #12: 0x000000010095baa9 chatterino`chatterino::TwitchChannel::~TwitchChannel(this=0x000000010a089200) at TwitchChannel.hpp:64:7
    frame #13: 0x00000001009d8e4c chatterino`std::__1::default_delete<chatterino::TwitchChannel>::operator(this=0x000060000022a4d8, __ptr=0x000000010a089200)(chatterino::TwitchChannel*) const at unique_ptr.h:57:5
    frame #14: 0x00000001009d8b7a chatterino`std::__1::__shared_ptr_pointer<chatterino::TwitchChannel*, std::__1::shared_ptr<chatterino::TwitchChannel>::__shared_ptr_default_delete<chatterino::TwitchChannel, chatterino::TwitchChannel>, std::__1::allocator<chatterino::TwitchChannel>>::__on_zero_shared(this=0x000060000022a4c0) at shared_ptr.h:267:5
    frame #15: 0x000000010000bb11 chatterino`std::__1::__shared_count::__release_shared(this=0x000060000022a4c0) at shared_ptr.h:177:9
    frame #16: 0x000000010000bab9 chatterino`std::__1::__shared_weak_count::__release_shared(this=0x000060000022a4c0) at shared_ptr.h:219:27
    frame #17: 0x000000010000ba8c chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBodyBase>::~shared_ptr(this=0x00000001264302c0) at shared_ptr.h:959:19
    frame #18: 0x000000010000b6b5 chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBodyBase>::~shared_ptr(this=0x00000001264302c0) at shared_ptr.h:957:1
    frame #19: 0x0000000100d76f30 chatterino`chatterino::SelectChannelDialog::~SelectChannelDialog(this=0x000000012642fff0) at SelectChannelDialog.hpp:18:7
    frame #20: 0x0000000100d70005 chatterino`chatterino::SelectChannelDialog::~SelectChannelDialog(this=0x000000012642fff0) at SelectChannelDialog.hpp:18:7
    frame #21: 0x0000000100d70029 chatterino`chatterino::SelectChannelDialog::~SelectChannelDialog(this=0x000000012642fff0) at SelectChannelDialog.hpp:18:7
    frame #22: 0x0000000109866590 QtCore`QObject::event(QEvent*) + 800
    frame #23: 0x0000000108524505 QtWidgets`QWidget::event(QEvent*) + 4677
    frame #24: 0x0000000100c54c60 chatterino`chatterino::BaseWindow::event(this=0x000000012642fff0, event=0x0000600000217620) at BaseWindow.cpp:333:21
    frame #25: 0x00000001084e7886 QtWidgets`QApplicationPrivate::notify_helper(QObject*, QEvent*) + 262
    frame #26: 0x00000001084e8c0d QtWidgets`QApplication::notify(QObject*, QEvent*) + 477
    frame #27: 0x000000010983cd67 QtCore`QCoreApplication::notifyInternal2(QObject*, QEvent*) + 167
    frame #28: 0x000000010983e0b9 QtCore`QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) + 1353
    frame #29: 0x000000010d72baf8 libqcocoa.dylib`___lldb_unnamed_symbol2621 + 312
    frame #30: 0x000000010d72c218 libqcocoa.dylib`___lldb_unnamed_symbol2633 + 40
    frame #31: 0x00007ff815bbd17b CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    frame #32: 0x00007ff815bbd0e3 CoreFoundation`__CFRunLoopDoSource0 + 180
    frame #33: 0x00007ff815bbce5d CoreFoundation`__CFRunLoopDoSources0 + 242
    frame #34: 0x00007ff815bbb878 CoreFoundation`__CFRunLoopRun + 892
    frame #35: 0x00007ff815bbae3c CoreFoundation`CFRunLoopRunSpecific + 562
    frame #36: 0x00007ff81e86a5e6 HIToolbox`RunCurrentEventLoopInMode + 292
    frame #37: 0x00007ff81e86a213 HIToolbox`ReceiveNextEventCommon + 283
    frame #38: 0x00007ff81e86a0e5 HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 70
    frame #39: 0x00007ff8185f4fad AppKit`_DPSNextEvent + 927
    frame #40: 0x00007ff8185f366a AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1394
    frame #41: 0x00007ff8185e5d19 AppKit`-[NSApplication run] + 586
    frame #42: 0x000000010d72aef3 libqcocoa.dylib`___lldb_unnamed_symbol2613 + 2211
    frame #43: 0x0000000109839336 QtCore`QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 502
    frame #44: 0x000000010983d302 QtCore`QCoreApplication::exec() + 130
    frame #45: 0x0000000100024f75 chatterino`chatterino::Application::run(this=0x00007ff7bfef8068, qtApp=0x00007ff7bfef8398) at Application.cpp:229:12
    frame #46: 0x00000001000cce27 chatterino`chatterino::runGui(a=0x00007ff7bfef8398, paths=0x0000600001734cc0, settings=0x00007ff7bfef83b8) at RunGui.cpp:246:9
    frame #47: 0x00000001000091fd chatterino`main(argc=3, argv=0x00007ff7bfeff750) at main.cpp:89:9
    frame #48: 0x0000000107cc552e dyld`start + 462

Opening a reply thread, closing it, opening a reply thread and typing a message in there (no idea how that relates to the previous crashes) - the message is sent but the application crashes, opening a reply thread for the first time and replying works fine.

Backtrace
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
  * frame #0: 0x00007ff815ac000e libsystem_kernel.dylib`__pthread_kill + 10
    frame #1: 0x00007ff815af61ff libsystem_pthread.dylib`pthread_kill + 263
    frame #2: 0x00007ff815a41d24 libsystem_c.dylib`abort + 123
    frame #3: 0x00007ff815ab2082 libc++abi.dylib`abort_message + 241
    frame #4: 0x00007ff815aa31a5 libc++abi.dylib`demangling_terminate_handler() + 242
    frame #5: 0x00007ff81599fe19 libobjc.A.dylib`_objc_terminate() + 104
    frame #6: 0x00007ff815ab14a7 libc++abi.dylib`std::__terminate(void (*)()) + 8
    frame #7: 0x00007ff815ab1458 libc++abi.dylib`std::terminate() + 56
    frame #8: 0x00000001000093cb chatterino`__clang_call_terminate + 11
    frame #9: 0x00000001000e3058 chatterino`chatterino::Channel::~Channel(this=0x000000010dd0d218) at Channel.cpp:38:1
    frame #10: 0x00000001009619db chatterino`chatterino::TwitchChannel::~TwitchChannel(this=0x000000010dd0d218) at TwitchChannel.hpp:64:7
    frame #11: 0x000000010095ba85 chatterino`chatterino::TwitchChannel::~TwitchChannel(this=0x000000010dd0d218) at TwitchChannel.hpp:64:7
    frame #12: 0x0000000100d66a15 chatterino`void std::__1::destroy_at<chatterino::TwitchChannel>(__loc=0x000000010dd0d218) at construct_at.h:50:13
    frame #13: 0x0000000100d669f9 chatterino`void std::__1::allocator_traits<std::__1::allocator<chatterino::TwitchChannel>>::destroy<chatterino::TwitchChannel, void, void>((null)=0x00007ff7bfef3aa0, __p=0x000000010dd0d218) at allocator_traits.h:317:9
    frame #14: 0x0000000100d6683e chatterino`std::__1::__shared_ptr_emplace<chatterino::TwitchChannel, std::__1::allocator<chatterino::TwitchChannel>>::__on_zero_shared(this=0x000000010dd0d200) at shared_ptr.h:313:9
    frame #15: 0x000000010000bb11 chatterino`std::__1::__shared_count::__release_shared(this=0x000000010dd0d200) at shared_ptr.h:177:9
    frame #16: 0x000000010000bab9 chatterino`std::__1::__shared_weak_count::__release_shared(this=0x000000010dd0d200) at shared_ptr.h:219:27
    frame #17: 0x000000010000ba8c chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBodyBase>::~shared_ptr(this=0x00006000029b4d70) at shared_ptr.h:959:19
    frame #18: 0x000000010000b6b5 chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBodyBase>::~shared_ptr(this=0x00006000029b4d70) at shared_ptr.h:957:1
    frame #19: 0x0000000100d54b89 chatterino`chatterino::ReplyThreadPopup::addMessagesFromThread(this=0x00006000029b4d68)::$_2::~$_2() at ReplyThreadPopup.cpp:175:17
    frame #20: 0x0000000100d4f9c5 chatterino`chatterino::ReplyThreadPopup::addMessagesFromThread(this=0x00006000029b4d68)::$_2::~$_2() at ReplyThreadPopup.cpp:175:17
    frame #21: 0x0000000100d6a095 chatterino`std::__1::__compressed_pair_elem<chatterino::ReplyThreadPopup::addMessagesFromThread()::$_2, 0, false>::~__compressed_pair_elem(this=0x00006000029b4d68) at compressed_pair.h:35:8
    frame #22: 0x0000000100d6a265 chatterino`std::__1::__compressed_pair<chatterino::ReplyThreadPopup::addMessagesFromThread()::$_2, std::__1::allocator<chatterino::ReplyThreadPopup::addMessagesFromThread()::$_2>>::~__compressed_pair(this=0x00006000029b4d68) at compressed_pair.h:109:7
    frame #23: 0x0000000100d6a245 chatterino`std::__1::__compressed_pair<chatterino::ReplyThreadPopup::addMessagesFromThread()::$_2, std::__1::allocator<chatterino::ReplyThreadPopup::addMessagesFromThread()::$_2>>::~__compressed_pair(this=0x00006000029b4d68) at compressed_pair.h:109:7
    frame #24: 0x0000000100d6afe5 chatterino`std::__1::__function::__alloc_func<chatterino::ReplyThreadPopup::addMessagesFromThread()::$_2, std::__1::allocator<chatterino::ReplyThreadPopup::addMessagesFromThread()::$_2>, void (std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>)>::destroy(this=0x00006000029b4d68) at function.h:197:38
    frame #25: 0x0000000100d69ae9 chatterino`std::__1::__function::__func<chatterino::ReplyThreadPopup::addMessagesFromThread()::$_2, std::__1::allocator<chatterino::ReplyThreadPopup::addMessagesFromThread()::$_2>, void (std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>)>::destroy(this=0x00006000029b4d60) at function.h:334:10
    frame #26: 0x0000000100d6b3cf chatterino`std::__1::__function::__value_func<void (std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>)>::~__value_func(this=0x00006000029b4d60) at function.h:464:19
    frame #27: 0x0000000100d6b395 chatterino`std::__1::__function::__value_func<void (std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>)>::~__value_func(this=0x00006000029b4d60) at function.h:462:5
    frame #28: 0x0000000100d6b375 chatterino`std::__1::function<void (std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>)>::~function(this=0x00006000029b4d60) at function.h:1169:43
    frame #29: 0x0000000100d4f9a5 chatterino`std::__1::function<void (std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>)>::~function(this=0x00006000029b4d60) at function.h:1169:42
    frame #30: 0x0000000100d6847b chatterino`pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>::~CallbackBody(this=0x00006000029b4d40) at connection.hpp:115:37
    frame #31: 0x0000000100d683b5 chatterino`pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>::~CallbackBody(this=0x00006000029b4d40) at connection.hpp:115:37
    frame #32: 0x0000000100d68525 chatterino`void std::__1::destroy_at<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>>(__loc=0x00006000029b4d40) at construct_at.h:50:13
    frame #33: 0x0000000100d68509 chatterino`void std::__1::allocator_traits<std::__1::allocator<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>>>::destroy<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>, void, void>((null)=0x00007ff7bfef3d40, __p=0x00006000029b4d40) at allocator_traits.h:317:9
    frame #34: 0x0000000100d681be chatterino`std::__1::__shared_ptr_emplace<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>, std::__1::allocator<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>>>::__on_zero_shared(this=0x00006000029b4d20) at shared_ptr.h:313:9
    frame #35: 0x000000010000bb11 chatterino`std::__1::__shared_count::__release_shared(this=0x00006000029b4d20) at shared_ptr.h:177:9
    frame #36: 0x000000010000bab9 chatterino`std::__1::__shared_weak_count::__release_shared(this=0x00006000029b4d20) at shared_ptr.h:219:27
    frame #37: 0x000000010000ba8c chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBodyBase>::~shared_ptr(this=0x00007ff7bfef3e00) at shared_ptr.h:959:19
    frame #38: 0x000000010000b6b5 chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBodyBase>::~shared_ptr(this=0x00007ff7bfef3e00) at shared_ptr.h:957:1
    frame #39: 0x00000001000efeb3 chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>>::operator=(this=0x00006000018bfd90, __r=nullptr) at shared_ptr.h:990:5
    frame #40: 0x00000001000efe37 chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>>* std::__1::__move_constexpr<std::__1::shared_ptr<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>>*, std::__1::shared_ptr<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>>*>(__first=0x00006000018bfda0, __last=0x00006000018bfdb0, __result=0x00006000018bfd90) at move.h:36:19
    frame #41: 0x00000001000efdd5 chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>>* std::__1::__move<std::__1::shared_ptr<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>>*, std::__1::shared_ptr<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>>*>(__first=0x00006000018bfda0, __last=0x00006000018bfdb0, __result=0x00006000018bfd90) at move.h:45:12
    frame #42: 0x00000001000efbbf chatterino`std::__1::shared_ptr<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>>* std::__1::move<std::__1::shared_ptr<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>>*, std::__1::shared_ptr<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>>*>(__first=0x00006000018bfda0, __last=0x00006000018bfdb0, __result=0x00006000018bfd90) at move.h:73:13
    frame #43: 0x00000001000ef9b0 chatterino`std::__1::vector<std::__1::shared_ptr<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>>, std::__1::allocator<std::__1::shared_ptr<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>>>>::erase(this=0x000000010b051780 size=3, __position=std::__1::vector<std::__1::shared_ptr<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<const chatterino::Message> &, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long> > > >, std::__1::allocator<std::__1::shared_ptr<pajlada::Signals::detail::CallbackBody<std::__1::shared_ptr<const chatterino::Message> &, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long> > > > > >::const_iterator @ 0x00007ff7bfef3f00) at vector:1740:29
    frame #44: 0x00000001000ef707 chatterino`pajlada::Signals::Signal<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>::getActiveBodies(this=0x000000010b051738) at signal.hpp:74:43
    frame #45: 0x00000001000e39e2 chatterino`pajlada::Signals::Signal<std::__1::shared_ptr<chatterino::Message const>&, boost::optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long>>>::invoke(this=0x000000010b051738, args=std::__1::shared_ptr<const chatterino::Message>::element_type @ 0x0000600003f38718 strong=3 weak=2, args=<unavailable>) at signal.hpp:38:35
    frame #46: 0x00000001000e3665 chatterino`chatterino::Channel::addMessage(this=0x000000010b051600, message=std::__1::shared_ptr<const chatterino::Message>::element_type @ 0x0000600003f38718 strong=3 weak=2, overridingFlags=optional<chatterino::FlagsEnum<chatterino::MessageFlag, long long> > @ 0x00007ff7bfef4650) at Channel.cpp:110:27
    frame #47: 0x00000001007f3acc chatterino`chatterino::IrcMessageHandler::addMessage(this=0x000000010157e828, _message=0x0000600000239060, target=0x00007ff7bfef4710, content_=0x00007ff7bfef4708, server=0x000000010a064800, isSub=false, isAction=false) at IrcMessageHandler.cpp:554:15
    frame #48: 0x00000001007f29a2 chatterino`chatterino::IrcMessageHandler::handlePrivMessage(this=0x000000010157e828, message=0x0000600000239060, server=0x000000010a064800) at IrcMessageHandler.cpp:319:11
    frame #49: 0x00000001009c828d chatterino`chatterino::TwitchIrcServer::privateMessageReceived(this=0x000000010a064800, message=0x0000600000239060) at TwitchIrcServer.cpp:162:35
    frame #50: 0x00000001006f78a1 chatterino`auto chatterino::AbstractIrcServer::AbstractIrcServer(this=0x000060000022b270, msg=0x0000600000239060)::$_5::operator()<Communi::IrcPrivateMessage*>(Communi::IrcPrivateMessage*) const at AbstractIrcServer.cpp:68:32
    frame #51: 0x00000001006f7864 chatterino`QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<Communi::IrcPrivateMessage*>, void, chatterino::AbstractIrcServer::AbstractIrcServer()::$_5>::call(f=0x000060000022b270, arg=0x00007ff7bfef4930)::$_5&, void**) at qobjectdefs_impl.h:146:13
    frame #52: 0x00000001006f7811 chatterino`void QtPrivate::Functor<chatterino::AbstractIrcServer::AbstractIrcServer()::$_5, 1>::call<QtPrivate::List<Communi::IrcPrivateMessage*>, void>(f=0x000060000022b270, (null)=0x000000010a064800, arg=0x00007ff7bfef4930)::$_5&, void*, void**) at qobjectdefs_impl.h:256:13
    frame #53: 0x00000001006f77b1 chatterino`QtPrivate::QFunctorSlotObject<chatterino::AbstractIrcServer::AbstractIrcServer()::$_5, 1, QtPrivate::List<Communi::IrcPrivateMessage*>, void>::impl(which=1, this_=0x000060000022b260, r=0x000000010a064800, a=0x00007ff7bfef4930, ret=0x0000000000000000) at qobjectdefs_impl.h:443:17
    frame #54: 0x000000010986e2e5 QtCore`___lldb_unnamed_symbol9558 + 1125
    frame #55: 0x00000001011b7674 chatterino`Communi::IrcConnection::privateMessageReceived(this=0x0000000108d38930, _t1=0x0000600000239060) at moc_ircconnection.cpp:1535:5
    frame #56: 0x00000001011b69fb chatterino`Communi::IrcConnectionPrivate::receiveMessage(this=0x0000600003d042d0, msg=0x0000600000239060) at ircconnection.cpp:538:21
    frame #57: 0x0000000101210dab chatterino`Communi::IrcProtocol::receiveMessage(this=0x000060000022b120, message=0x0000600000239060) at ircprotocol.cpp:517:15
    frame #58: 0x000000010120dcde chatterino`Communi::IrcProtocolPrivate::processLine(this=0x0000600001737a80, line=0x00007ff7bfef4d00) at ircprotocol.cpp:166:12
    frame #59: 0x000000010120d4cf chatterino`Communi::IrcProtocolPrivate::readLines(this=0x0000600001737a80, delimiter=0x00007ff7bfef4d70) at ircprotocol.cpp:117:13
    frame #60: 0x0000000101212253 chatterino`Communi::IrcProtocol::read(this=0x000060000022b120) at ircprotocol.cpp:489:8
    frame #61: 0x00000001011b52ea chatterino`Communi::IrcConnectionPrivate::_irc_readData(this=0x0000600003d042d0) at ircconnection.cpp:357:15
    frame #62: 0x00000001011be67a chatterino`Communi::IrcConnection::qt_static_metacall(_o=0x0000000108d38930, _c=InvokeMetaMethod, _id=70, _a=0x00007ff7bfef4fa8) at moc_ircconnection.cpp:597:32
    frame #63: 0x000000010986e40c QtCore`___lldb_unnamed_symbol9558 + 1420
    frame #64: 0x000000010815d0c4 QtNetwork`___lldb_unnamed_symbol4634 + 212
    frame #65: 0x000000010986e40c QtCore`___lldb_unnamed_symbol9558 + 1420
    frame #66: 0x000000010811db85 QtNetwork`___lldb_unnamed_symbol4085 + 245
    frame #67: 0x000000010813126e QtNetwork`___lldb_unnamed_symbol4354 + 30
    frame #68: 0x00000001084e7886 QtWidgets`QApplicationPrivate::notify_helper(QObject*, QEvent*) + 262
    frame #69: 0x00000001084e8c0d QtWidgets`QApplication::notify(QObject*, QEvent*) + 477
    frame #70: 0x000000010983cd67 QtCore`QCoreApplication::notifyInternal2(QObject*, QEvent*) + 167
    frame #71: 0x000000010988ffee QtCore`___lldb_unnamed_symbol9715 + 238
    frame #72: 0x00007ff815be6581 CoreFoundation`__CFSocketPerformV0 + 946
    frame #73: 0x00007ff815bbd17b CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    frame #74: 0x00007ff815bbd0e3 CoreFoundation`__CFRunLoopDoSource0 + 180
    frame #75: 0x00007ff815bbce5d CoreFoundation`__CFRunLoopDoSources0 + 242
    frame #76: 0x00007ff815bbb878 CoreFoundation`__CFRunLoopRun + 892
    frame #77: 0x00007ff815bbae3c CoreFoundation`CFRunLoopRunSpecific + 562
    frame #78: 0x00007ff81e86a5e6 HIToolbox`RunCurrentEventLoopInMode + 292
    frame #79: 0x00007ff81e86a34a HIToolbox`ReceiveNextEventCommon + 594
    frame #80: 0x00007ff81e86a0e5 HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 70
    frame #81: 0x00007ff8185f4fad AppKit`_DPSNextEvent + 927
    frame #82: 0x00007ff8185f366a AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1394
    frame #83: 0x00007ff8185e5d19 AppKit`-[NSApplication run] + 586
    frame #84: 0x000000010d72aef3 libqcocoa.dylib`___lldb_unnamed_symbol2613 + 2211
    frame #85: 0x0000000109839336 QtCore`QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 502
    frame #86: 0x000000010983d302 QtCore`QCoreApplication::exec() + 130
    frame #87: 0x0000000100024f75 chatterino`chatterino::Application::run(this=0x00007ff7bfef8068, qtApp=0x00007ff7bfef8398) at Application.cpp:229:12
    frame #88: 0x00000001000cce27 chatterino`chatterino::runGui(a=0x00007ff7bfef8398, paths=0x0000600001731e40, settings=0x00007ff7bfef83b8) at RunGui.cpp:246:9
    frame #89: 0x00000001000091fd chatterino`main(argc=3, argv=0x00007ff7bfeff750) at main.cpp:89:9
    frame #90: 0x0000000107cc552e dyld`start + 462

Stuff I thought about testing, but doesn't seem to cause a crash:

  • Closing a reply thread
  • Closing any other popup windows (i.e. the emote menu)

Screenshots

No response

OS and Chatterino Version

Chatterino 2.4.0 DEBUG (commit d313342 modified) built with Qt 5.15.8 Running on macOS 12.6, kernel: 21.6.0

@LosFarmosCTL LosFarmosCTL added the issue-report An issue reported by a user. label Jan 31, 2023
@pajlada pajlada added crash OS: Mac and removed issue-report An issue reported by a user. labels Jan 31, 2023
@Nerixyz
Copy link
Contributor

Nerixyz commented Jan 31, 2023

seemingly connected to destroying channel objects.
[...]
at Channel.cpp:38:1

this->destroyed.invoke();

I'd guess the signal handlers aren't part of the stacktrace. I made a change that was necessary for me here, since I ran into this as well - but only with doing additional stuff afterwards.

@LosFarmosCTL
Copy link
Contributor Author

Sorry, I linked the wrong PR in the original issue (I have edited the comment now), this was not introduced by 7TV emote updates (#4090), but by the BTTV ones (#4147)

@Nerixyz
Copy link
Contributor

Nerixyz commented Jan 31, 2023

I think it's this handler that's responsible for the crash:

this->destroyed.connect([this]() {
getApp()->twitch->dropSeventvChannel(this->seventvUserID_,
this->seventvEmoteSetID_);
if (getApp()->twitch->bttvLiveUpdates)
{
getApp()->twitch->bttvLiveUpdates->partChannel(this->roomId());
}
});

I'd guess the strings are already free'd when this gets called, or are passed to a function that uses them after they're free'd.

@dnsge
Copy link
Contributor

dnsge commented Jan 31, 2023

I think it's this handler that's responsible for the crash

I think this makes sense. The Channel destructor will always be called after the TwitchChannel destructor, so when the signal is invoked, the strings may have already been deleted (or also this->roomId(), which is UB). https://isocpp.org/wiki/faq/dtors#order-dtors-for-members

If this is really the case, it should be solvable by placing the callback body inside the overridden destructor ~TwitchChannel (which doesn't exist yet)

@LosFarmosCTL
Copy link
Contributor Author

I think it's this handler that's responsible for the crash:

Yup looks like you are spot on, I just removed those 8 lines and the crashes are gone.

@Nerixyz Nerixyz mentioned this issue Feb 3, 2023
1 task
@dnsge
Copy link
Contributor

dnsge commented Feb 5, 2023

Has this been fixed as of #4342?

@LosFarmosCTL
Copy link
Contributor Author

Can confirm, fixed by #4342

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants