GeopJr / Tuba

Browse the Fediverse
https://tuba.geopjr.dev/
GNU General Public License v3.0
504 stars 55 forks source link

[Bug]: Crash when repeatedly playing / pausing and/or entering/exiting enlarged video playback mode #1051

Open nekohayo opened 2 days ago

nekohayo commented 2 days ago

Describe the bug

I don't know if this is the same problem as @rmader's issue #924, but here is a crash I caught by monkey-testing a bit to try to reproduce a crash that occurred as I tried pausing fullscreen video playback and then hitting the Esc key to exit it.

Steps To Reproduce

Unsure. Please see this video of how I triggered the issue: https://youtu.be/npXUEBU06YQ

Logs and/or Screenshots

Thread 1 "dev.geopjr.Tuba" received signal SIGSEGV, Segmentation fault.
insert_subsurface (subsurface=subsurface@entry=0x55555b979960 [GdkWaylandSubsurface], above=above@entry=1, 
    sibling=sibling@entry=0x55555ac10d50) at ../gdk/gdksubsurface.c:93
93          subsurface->sibling_above->sibling_below = subsurface;
(gdb) bt full
#0  insert_subsurface
    (subsurface=subsurface@entry=0x55555b979960 [GdkWaylandSubsurface], above=above@entry=1, sibling=sibling@entry=0x55555ac10d50) at ../gdk/gdksubsurface.c:93
        parent = 0x555555ffb0e0 [GdkWaylandToplevel]
#1  0x00007ffff6ceba8d in gdk_subsurface_attach
    (subsurface=0x55555b979960 [GdkWaylandSubsurface], texture=0x7ffee8004d20 [GdkGLTexture], source=0x5555592a9e78, dest=0x5555592a9e68, above=0, sibling=0x55555ac10d50) at ../gdk/gdksubsurface.c:145
        parent = 0x555555ffb0e0 [GdkWaylandToplevel]
        __func__ = "gdk_subsurface_attach"
#2  0x00007ffff6cfa24e in gsk_offload_new
    (surface=<optimized out>, root=root@entry=0x55555bfd7570 [GskTransformNode], diff=diff@entry=0x555560338e50)
    at ../gsk/gskoffload.c:658
        info = 0x5555592a9e50
        old_dest = {origin = {x = 0, y = 0}, size = {width = 0, height = 0}}
        i = 0
        display = 0x5555557f2330 [GdkWaylandDisplay]
        self = 0x5555585eb840
#3  0x00007ffff6d0396a in gsk_renderer_render
    (renderer=renderer@entry=0x555555ffca00 [GskGLRenderer], root=root@entry=0x55555bfd7570 [GskTransformNode], region=region@entry=0x5555585dd220) at ../gsk/gskrenderer.c:493
        priv = <optimized out>
        renderer_class = 0x5555560281b0
        clip = 0x555560338e50
        offload = <optimized out>
        __func__ = "gsk_renderer_render"
#4  0x00007ffff6ac4d0f in gtk_widget_render
    (widget=widget@entry=0x55555585b980 [TubaDialogsMainWindow], surface=0x555555ffb0e0 [GdkWaylandToplevel], region=region@entry=0x5555585dd220) at ../gtk/gtkwidget.c:11971
        priv = 0x55555585b830
        snapshot = <optimized out>
        renderer = 0x555555ffca00 [GskGLRenderer]
        root = 0x55555bfd7570 [GskTransformNode]
        x = 61
        y = 55
        before_snapshot = <optimized out>
        before_render = 0
#5  0x00007ffff6acc819 in surface_render
    (surface=<optimized out>, region=region@entry=0x5555585dd220, widget=widget@entry=0x55555585b980 [TubaDialogsMainWindow])
    at ../gtk/gtkwindow.c:4756
#10 0x00007ffff7d65ed3 in <emit signal 'render' on instance 0x555555ffb0e0 [GdkWaylandToplevel]>
    (instance=instance@entry=0x555555ffb0e0, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3583
        var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffd270, reg_save_area = 0x7fffffffd1b0}}
    #6  0x00007ffff6c5a877 in _gdk_marshal_BOOLEAN__BOXEDv
    (closure=0x555557f5c010, return_value=0x7fffffffd080, instance=<optimized out>, args=<optimized out>, marshal_data=<optimized out>, n_params=<optimized out>, param_types=0x555555a68bc0) at gdk/gdkmarshalers.c:130
                cc = <optimized out>
                data1 = <optimized out>
                data2 = 0x55555585b980
                callback = 0x7ffff6acc800 <surface_render>
                v_return = <optimized out>
                arg0 = 0x5555585dd220
                args_copy = {{gp_offset = 32, fp_offset = 48, overflow_arg_area = 0x7fffffffd270, reg_save_area = 0x7fffffffd1b0}}
                __func__ = "_gdk_marshal_BOOLEAN__BOXEDv"
    #7  0x00007ffff7d48912 in _g_closure_invoke_va
    (closure=0x555557f5c010, return_value=0x7fffffffd080, instance=0x555555ffb0e0, args=0x7fffffffd190, n_params=1, param_types=0x555555a68bc0) at ../gobject/gclosure.c:897
                marshal = 0x7ffff6c5a7d0 <_gdk_marshal_BOOLEAN__BOXEDv>
                marshal_data = 0x0
                in_marshal = 0
                real_closure = 0x555557f5bff0
                __func__ = "_g_closure_invoke_va"
    #8  0x00007ffff7d5f203 in signal_emit_valist_unlocked
    (instance=instance@entry=0x555555ffb0e0, signal_id=signal_id@entry=267, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffd190) at ../gobject/gsignal.c:3424
                return_accu = 0x7fffffffd080
                accu = {g_type = 0x14 [gboolean], data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
                emission = {next = 0x7fffffffd390, instance = 0x555555ffb0e0, ihint = {signal_id = 267, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 0x5555557ebd00 [GdkWaylandToplevel/GdkWaylandSurface/GdkSurface]}
                instance_type = <optimized out>
                emission_return = {g_type = 0x14 [gboolean], data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
                rtype = 0x14 [gboolean]
                static_scope = 0
                fastpath_handler = <optimized out>
                closure = <optimized out>
                run_type = <optimized out>
                hlist = <optimized out>
                l = <optimized out>
                fastpath = <optimized out>
                instance_and_params = <optimized out>
                param_values = <optimized out>
                node = <optimized out>
                i = <optimized out>
                __func__ = "signal_emit_valist_unlocked"
                node_copy = {signal_id = 267, itype = 0x5555557f1420 [GdkSurface], name = 0x7ffff6d9c499 "render", destroyed = 0, flags = 2, n_params = 1, single_va_closure_is_valid = 1, single_va_closure_is_after = 0, param_types = 0x555555a68bc0, return_type = 0x14 [gboolean], class_closure_bsa = 0x0, accumulator = 0x555555ff8c70, c_marshaller = 0x7ffff6c5a700 <_gdk_marshal_BOOLEAN__BOXED>, va_marshaller = 0x7ffff6c5a7d0 <_gdk_marshal_BOOLEAN__BOXEDv>, emission_hooks = 0x0, single_va_closure = 0x1}
    #9  0x00007ffff7d65e11 in g_signal_emit_valist (instance=0x555555ffb0e0, signal_id=267, detail=0, var_args=0x7fffffffd190)
    at ../gobject/gsignal.c:3263
#11 0x00007ffff6cec929 in gdk_surface_paint_on_clock (clock=<optimized out>, data=0x555555ffb0e0) at ../gdk/gdksurface.c:1370
        handled = 32767
        surface = <optimized out>
        expose_region = 0x5555585dd220
        surface = <optimized out>
        expose_region = <optimized out>
        __func__ = "gdk_surface_paint_on_clock"
        _g_boolean_var_41 = <optimized out>
        __inst = <optimized out>
        __t = <optimized out>
        __r = <optimized out>
        handled = <optimized out>
#12 gdk_surface_paint_on_clock (clock=<optimized out>, data=0x555555ffb0e0) at ../gdk/gdksurface.c:1346
        surface = 0x555555ffb0e0 [GdkWaylandToplevel]
        expose_region = <optimized out>
        __func__ = "gdk_surface_paint_on_clock"
        handled = <optimized out>
#16 0x00007ffff7d65ed3 in <emit signal 'paint' on instance 0x555555ffac00 [GdkFrameClockIdle]>
    (instance=instance@entry=0x555555ffac00, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3583
        var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffd610, reg_save_area = 0x7fffffffd550}}
    #13 0x00007ffff7d48912 in _g_closure_invoke_va
    (closure=0x555555ffae00, return_value=0x0, instance=0x555555ffac00, args=0x7fffffffd530, n_params=0, param_types=0x0)
    at ../gobject/gclosure.c:897
                marshal = 0x7ffff7d4aba0 <g_cclosure_marshal_VOID__VOIDv>
                marshal_data = 0x0
                in_marshal = 0
                real_closure = 0x555555ffade0
                __func__ = "_g_closure_invoke_va"
    #14 0x00007ffff7d5feff in signal_emit_valist_unlocked
    (instance=instance@entry=0x555555ffac00, signal_id=signal_id@entry=276, detail=detail@entry=0, var_args=var_args@entry=0x7fffffffd530) at ../gobject/gsignal.c:3424
                return_accu = 0x0
                accu = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
                emission = {next = 0x0, instance = 0x555555ffac00, ihint = {signal_id = 276, detail = 0, run_type = (G_SIGNAL_RUN_FIRST | G_SIGNAL_ACCUMULATOR_FIRST_RUN)}, state = EMISSION_RUN, chain_type = 0x555555ffb5d0 [GdkFrameClockIdle/GdkFrameClock]}
                instance_type = <optimized out>
                emission_return = {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
                rtype = 0x4 [void]
                static_scope = 0
                fastpath_handler = <optimized out>
                closure = <optimized out>
                run_type = <optimized out>
                hlist = <optimized out>
                l = <optimized out>
                fastpath = <optimized out>
                instance_and_params = <optimized out>
                param_values = <optimized out>
                node = <optimized out>
                i = <optimized out>
                __func__ = "signal_emit_valist_unlocked"
                node_copy = {signal_id = 276, itype = 0x555555ff9410 [GdkFrameClock], name = 0x7ffff6daea4f "paint", destroyed = 0, flags = 2, n_params = 0, single_va_closure_is_valid = 1, single_va_closure_is_after = 0, param_types = 0x0, return_type = 0x4 [void], class_closure_bsa = 0x0, accumulator = 0x0, c_marshaller = 0x7ffff7d4ab10 <g_cclosure_marshal_VOID__VOID>, va_marshaller = 0x7ffff7d4aba0 <g_cclosure_marshal_VOID__VOIDv>, emission_hooks = 0x0, single_va_closure = 0x1}
    #15 0x00007ffff7d65e11 in g_signal_emit_valist (instance=0x555555ffac00, signal_id=276, detail=0, var_args=0x7fffffffd530)
    at ../gobject/gsignal.c:3263
#17 0x00007ffff6cd213d in _gdk_frame_clock_emit_paint (frame_clock=frame_clock@entry=0x555555ffac00 [GdkFrameClockIdle])
    at ../gdk/gdkframeclock.c:736
        before = 85637416950721
#18 0x00007ffff6cd31f8 in gdk_frame_clock_paint_idle (data=0x555555ffac00) at ../gdk/gdkframeclockidle.c:634
        clock = 0x555555ffac00 [GdkFrameClockIdle]
        clock_idle = 0x555555ffac00 [GdkFrameClockIdle]
        priv = 0x555555ffa960
        skip_to_resume_events = 0
        timings = 0x555558681ed0
        before = 85637407605969
        __func__ = "gdk_frame_clock_paint_idle"
#19 0x00007ffff7ec456a in g_timeout_dispatch (source=0x55555d2dd9d0, callback=<optimized out>, user_data=<optimized out>)
    at ../glib/gmain.c:4989
        timeout_source = 0x55555d2dd9d0
        again = <optimized out>
#20 0x00007ffff7ec1667 in g_main_dispatch (context=context@entry=0x5555557b69b0) at ../glib/gmain.c:3344
        dispatch = 0x7ffff7ec4540 <g_timeout_dispatch>
        prev_source = 0x0
        begin_time_nsec = 85637407605886
        was_in_call = 0
        user_data = 0x555555ffac00
        callback = 0x7ffff6cd2dd0 <gdk_frame_clock_paint_idle>
        cb_funcs = 0x7ffff7faf260 <g_source_callback_funcs>
        cb_data = 0x5555601f1600
        need_destroy = <optimized out>
        source = 0x55555d2dd9d0
        current = 0x5555557bee80
        i = 0
        __func__ = "g_main_dispatch"
#21 0x00007ffff7ec3787 in g_main_context_dispatch_unlocked (context=0x5555557b69b0) at ../glib/gmain.c:4152
#22 g_main_context_iterate_unlocked
    (context=context@entry=0x5555557b69b0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>)
    at ../glib/gmain.c:4217
        max_priority = 120
        timeout = 0
        some_ready = 1
        nfds = 14
        allocated_nfds = <optimized out>
        fds = 0x55555e2a4f00
        begin_time_nsec = 85637407576415
#23 0x00007ffff7ec3e43 in g_main_context_iteration (context=context@entry=0x5555557b69b0, may_block=may_block@entry=1)
    at ../glib/gmain.c:4282
        retval = <optimized out>
#24 0x00007ffff7b8f05d in g_application_run
    (application=0x5555557c90d0 [TubaApplication], argc=<optimized out>, argv=<optimized out>) at ../gio/gapplication.c:2712
        arguments = 0x5555557d3620
        status = 0
        context = 0x5555557b69b0
        acquired_context = <optimized out>
        __func__ = "g_application_run"
#25 0x00005555555ad407 in main ()

Instance Backend

Mastodon

Operating System

Fedora 39

Package

Flatpak

Troubleshooting information

os: GNOME 46 (Flatpak runtime) prefix: /app flatpak: true version: 0.8.1 (production) gtk: 4.14.4 (4.14.4) libadwaita: 1.5.1 (1.5.1) libsoup: 3.4.4 (3.4.4) libgtksourceview: 5.12.0 (5.12.0)

Additional Context

No response