Bug 465049 - Crash while recording and opening a QMenu popup menu
Summary: Crash while recording and opening a QMenu popup menu
Status: RESOLVED WORKSFORME
Alias: None
Product: Spectacle
Classification: Applications
Component: General (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: ---
Assignee: Boudhayan Gupta
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-01-30 18:04 UTC by Noah Davis
Modified: 2023-11-22 14:52 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments
`lldb -- spectacle -i` backtrace (11.98 KB, text/plain)
2023-01-30 18:04 UTC, Noah Davis
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Noah Davis 2023-01-30 18:04:34 UTC
Created attachment 155793 [details]
`lldb -- spectacle -i` backtrace

SUMMARY
If you are recording and you open one of the QMenu popup menus in Spectacle's main toolbar, sometimes the application will crash.

STEPS TO REPRODUCE
1. Start a recording of the whole workspace
2. Try to open and close the QMenu popups repeatedly.

OBSERVED RESULT
Sometimes Spectacle crashes when opening a QMenu popup.

EXPECTED RESULT
Spectacle should never crash.

SOFTWARE/OS VERSIONS
Spectacle version: git master a9952cadf10e77ab7a96206339c6cc702a36afbd
Operating System: openSUSE Tumbleweed 20230119
KDE Plasma Version: 5.28.80
KDE Frameworks Version: 5.103.0
Qt Version: 5.15.8
Kernel Version: 6.1.7-1-default (64-bit)
Graphics Platform: Wayland
Processors: 16 × AMD Ryzen 7 4800H with Radeon Graphics
Memory: 30.8 GiB of RAM
Graphics Processor: AMD Radeon Graphics
Manufacturer: Eluktronics
Product Name: THINN-15
Comment 1 Nicolas Fella 2023-02-05 13:14:44 UTC
  * frame #0: 0x00007ffff44957ec libc.so.6`__pthread_kill_implementation(threadid=<unavailable>, signo=6, no_tid=<unavailable>) at pthread_kill.c:44:76
    frame #1: 0x00007ffff4442816 libc.so.6`__GI_raise(sig=6) at raise.c:26:13
    frame #2: 0x00007ffff442b81c libc.so.6`abort at abort.c:79:7
    frame #3: 0x00007ffff442b72b libc.so.6`__assert_fail_base.cold at assert.c:92:3
    frame #4: 0x00007ffff443ac46 libc.so.6`__GI___assert_fail(assertion="frame->i_reference_count > 0", file="common/frame.c", line=774, function="x264_8_frame_push_unused") at assert.c:101:3
    frame #5: 0x00007fffef68deaf libx264.so.161`encoder_frame_end [inlined] x264_8_frame_push_unused(h=<unavailable>, frame=<unavailable>) at frame.c:774:5
    frame #6: 0x00007fffef68de90 libx264.so.161`encoder_frame_end [inlined] x264_8_frame_push_unused(frame=<unavailable>, h=0x00007fff50044ec0) at frame.c:772:6
    frame #7: 0x00007fffef68de90 libx264.so.161`encoder_frame_end(h=0x00007fff50078ec0, thread_current=0x00007fff50044ec0, pp_nal=0x00007fff6a210728, pi_nal=0x00007fff6a21071c, pic_out=0x00007fff6a210730) at encoder.c:3893:5
    frame #8: 0x00007fffef610111 libx264.so.161`x264_encoder_encode at api.c:165:12
    frame #9: 0x00007ffff33d91ea libavcodec.so.58.134`X264_frame(ctx=<unavailable>, pkt=0x00007fff50044680, frame=<unavailable>, got_packet=0x00007fff6a2108b4) at libx264.c:444:13
    frame #10: 0x00007ffff3255696 libavcodec.so.58.134`encode_receive_packet_internal at encode.c:214:15
    frame #11: 0x00007ffff325562d libavcodec.so.58.134`encode_receive_packet_internal at encode.c:275:15
    frame #12: 0x00007ffff3255600 libavcodec.so.58.134`encode_receive_packet_internal(avctx=0x00007fff50042880, avpkt=0x00007fff50044680) at encode.c:309:15
    frame #13: 0x00007ffff3255e04 libavcodec.so.58.134`avcodec_send_frame(avctx=0x00007fff50042880, frame=0x00007fff53619600) at encode.c:387:15
    frame #14: 0x00007ffff7cc78f5 libKPipeWireRecord.so.5`PipeWireRecordProduce::render(this=0x00007fff6a211560, frame=0x00007fff6a210b70) at pipewirerecord.cpp:440:39
    frame #15: 0x00007ffff4d132dd libQt5Core.so.5`void doActivate<false>(QObject*, int, void**) at qobjectdefs_impl.h:398:57
    frame #16: 0x00007ffff6027ff5 libKPipeWire.so.5`PipeWireSourceStream::frameReceived(this=0x00007fff500029e0, _t1=0x00007fff6a210b70) at moc_pipewiresourcestream.cpp:204:26
    frame #17: 0x00007ffff6032039 libKPipeWire.so.5`PipeWireSourceStream::handleFrame(this=0x00007fff500029e0, buffer=0x00007fff5003a930) at pipewiresourcestream.cpp:539:25
    frame #18: 0x00007ffff6032a4b libKPipeWire.so.5`PipeWireSourceStream::process(this=0x00007fff500029e0) at pipewiresourcestream.cpp:557:16
    frame #19: 0x00007ffff20b8370 libpipewire-0.3.so.0`do_call_process(loop=<unavailable>, async=<unavailable>, seq=<unavailable>, data=<unavailable>, size=<unavailable>, user_data=0x00007fff5003a4d0) at stream.c:435:2
    frame #20: 0x00007fffed1e62df libspa-support.so`___lldb_unnamed_symbol161 + 159
    frame #21: 0x00007fffed1e55b9 libspa-support.so`___lldb_unnamed_symbol153 + 121
    frame #22: 0x00007fffed1e84de libspa-support.so`___lldb_unnamed_symbol174 + 558
    frame #23: 0x00007ffff602894e libKPipeWire.so.5`QtPrivate::QFunctorSlotObject<PipeWireCore::init(int)::<lambda()>, 0, QtPrivate::List<>, void>::(anonymous)(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) at pipewirecore.cpp:78:22
    frame #24: 0x00007ffff4d132dd libQt5Core.so.5`void doActivate<false>(QObject*, int, void**) at qobjectdefs_impl.h:398:57
    frame #25: 0x00007ffff4d1663f libQt5Core.so.5`QSocketNotifier::activated(QSocketDescriptor, QSocketNotifier::Type, QSocketNotifier::QPrivateSignal) at moc_qsocketnotifier.cpp:178:26
    frame #26: 0x00007ffff4d16e45 libQt5Core.so.5`QSocketNotifier::event(QEvent*) at qsocketnotifier.cpp:302:23
    frame #27: 0x00007ffff59a544e libQt5Widgets.so.5`QApplicationPrivate::notify_helper(QObject*, QEvent*) at qapplication.cpp:3640:31
    frame #28: 0x00007ffff4cdc138 libQt5Core.so.5`QCoreApplication::notifyInternal2(QObject*, QEvent*) at qcoreapplication.cpp:1064:24
    frame #29: 0x00007ffff4d3464d libQt5Core.so.5`socketNotifierSourceDispatch(_GSource*, int (*)(void*), void*) at qeventdispatcher_glib.cpp:107:40
    frame #30: 0x00007ffff271ba90 libglib-2.0.so.0`g_main_context_dispatch at gmain.c:3454:28
    frame #31: 0x00007ffff271be48 libglib-2.0.so.0`g_main_context_iterate.constprop.0 at gmain.c:4248:5
    frame #32: 0x00007ffff271bedc libglib-2.0.so.0`g_main_context_iteration at gmain.c:4313:12
    frame #33: 0x00007ffff4d33b66 libQt5Core.so.5`QEventDispatcherGlib::processEvents(this=0x00007fff50000b70, flags=<unavailable>) at qeventdispatcher_glib.cpp:423:43
    frame #34: 0x00007ffff4cdabab libQt5Core.so.5`QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) at qeventloop.cpp:235:22
    frame #35: 0x00007ffff4af4c47 libQt5Core.so.5`QThread::exec() at qthread.cpp:547:36
    frame #36: 0x00007ffff7cc74d4 libKPipeWireRecord.so.5`PipeWireRecordProduceThread::run(this=0x0000000001292440) at pipewirerecord.cpp:186:25
    frame #37: 0x00007ffff4af5e3d libQt5Core.so.5`QThreadPrivate::start(void*) at qthread_unix.cpp:330:17
    frame #38: 0x00007ffff449398d libc.so.6`start_thread(arg=<unavailable>) at pthread_create.c:442:8
    frame #39: 0x00007ffff451a380 libc.so.6`__clone3 at clone3.S:81
Comment 2 Noah Davis 2023-11-22 14:52:26 UTC
I haven't encountered this for a while, so I'm resolving this.