Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • pipewire pipewire
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 573
    • Issues 573
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 24
    • Merge requests 24
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • PipeWirePipeWire
  • pipewirepipewire
  • Issues
  • #338
Closed
Open
Issue created Oct 19, 2020 by Georges Basile Stavracas Neto@feaneronContributor

Arithmetic exception (SIGFPE) crash on pulse-bridge when trying to play song with Rhythmbox

I'm not entirely sure why pulse-bridge is involved here, but whenever I try to play something with Rhythmbox, pipewire-media-session crashes.

Backtrace:

Program terminated with signal SIGFPE, Arithmetic exception.
#0  0x00007f5a19deea6d in fix_playback_buffer_attr (attr=0x7ffefa94aac0, s=0x56310baf8960) at ../src/modules/module-protocol-pulse/pulse-server.c:963
963		attr->maxlength = SPA_MAX(attr->maxlength, frame_size);
[Current thread is 1 (Thread 0x7f5a1a840400 (LWP 26693))]
(gdb) bt
#0  0x00007f5a19deea6d in fix_playback_buffer_attr (attr=0x7ffefa94aac0, s=0x56310baf8960) at ../src/modules/module-protocol-pulse/pulse-server.c:963
#1  do_create_playback_stream (client=0x56310baf65b0, command=<optimized out>, tag=2, m=<optimized out>) at ../src/modules/module-protocol-pulse/pulse-server.c:1168
#2  0x00007f5a19dea588 in handle_packet (msg=0x56310bb3d580, client=0x56310baf65b0) at ../src/modules/module-protocol-pulse/pulse-server.c:2535
#3  do_read (client=0x56310baf65b0) at ../src/modules/module-protocol-pulse/pulse-server.c:2658
#4  on_client_data (data=0x56310baf65b0, fd=<optimized out>, mask=<optimized out>) at ../src/modules/module-protocol-pulse/pulse-server.c:2693
#5  0x00007f5a1b08eb7b in loop_iterate (object=0x56310b920f78, timeout=<optimized out>) at ../spa/plugins/support/loop.c:306
#6  0x00007f5a1b015f1b in pw_main_loop_run (loop=0x56310b920e30) at ../src/pipewire/main-loop.c:156
#7  0x000056310b86509f in main (argc=<optimized out>, argv=<optimized out>) at ../src/examples/media-session/media-session.c:2235

It seems that, in fuction fix_playback_buffer_attr(), the variable frame_size (which comes from s->frame_size) is set to 0. This value is used at attr->maxlength -= attr->maxlength % frame_size. The C spec says that mod with zero is undefined.

The full backtrace is:

Program terminated with signal SIGFPE, Arithmetic exception.
#0  0x00007f5a19deea6d in fix_playback_buffer_attr (attr=0x7ffefa94aac0, s=0x56310baf8960) at ../src/modules/module-protocol-pulse/pulse-server.c:963
963		attr->maxlength = SPA_MAX(attr->maxlength, frame_size);
[Current thread is 1 (Thread 0x7f5a1a840400 (LWP 26693))]
(gdb) bt
#0  0x00007f5a19deea6d in fix_playback_buffer_attr (attr=0x7ffefa94aac0, s=0x56310baf8960) at ../src/modules/module-protocol-pulse/pulse-server.c:963
#1  do_create_playback_stream (client=0x56310baf65b0, command=<optimized out>, tag=2, m=<optimized out>) at ../src/modules/module-protocol-pulse/pulse-server.c:1168
#2  0x00007f5a19dea588 in handle_packet (msg=0x56310bb3d580, client=0x56310baf65b0) at ../src/modules/module-protocol-pulse/pulse-server.c:2535
#3  do_read (client=0x56310baf65b0) at ../src/modules/module-protocol-pulse/pulse-server.c:2658
#4  on_client_data (data=0x56310baf65b0, fd=<optimized out>, mask=<optimized out>) at ../src/modules/module-protocol-pulse/pulse-server.c:2693
#5  0x00007f5a1b08eb7b in loop_iterate (object=0x56310b920f78, timeout=<optimized out>) at ../spa/plugins/support/loop.c:306
#6  0x00007f5a1b015f1b in pw_main_loop_run (loop=0x56310b920e30) at ../src/pipewire/main-loop.c:156
#7  0x000056310b86509f in main (argc=<optimized out>, argv=<optimized out>) at ../src/examples/media-session/media-session.c:2235
(gdb) bt full
#0  0x00007f5a19deea6d in fix_playback_buffer_attr (attr=0x7ffefa94aac0, s=0x56310baf8960) at ../src/modules/module-protocol-pulse/pulse-server.c:963
        frame_size = 0
        max_prebuf = <optimized out>
        minreq = <optimized out>
        frame_size = <optimized out>
        max_prebuf = <optimized out>
        minreq = <optimized out>
        _a = <optimized out>
        _b = <optimized out>
        _a = <optimized out>
        _b = <optimized out>
        process = <optimized out>
        m = <optimized out>
        _a = <optimized out>
        _b = <optimized out>
        _a = <optimized out>
        _b = <optimized out>
        _a = <optimized out>
        _b = <optimized out>
#1  do_create_playback_stream (client=0x56310baf65b0, command=<optimized out>, tag=2, m=<optimized out>) at ../src/modules/module-protocol-pulse/pulse-server.c:1168
        impl = <optimized out>
        name = 0x0
        res = <optimized out>
        ss = {format = 255, rate = 0, channels = 0 '\000'}
        map = {channels = 0 '\000', map = {32766, 246829568, 420952383, 194265360, 22065, 194269072, 22065, 0, 0, 664, 0, 4204047584, 32766, 436108696, 32602, 194269000, 22065, 453686053, 32602, 3061135916, 0, 1, 0, 452798416, 32602, 193244872, 22065, 5, 0, 453687284, 32602, 105, 0, 452810432, 32602, 453459968, 32602, 4204047432, 32766, 4204047428, 32766, 435979909, 32602, 664, 0, 0, 32602, 452810432, 32602, 452799776, 32602, 193245487, 22065, 3061135916, 0, 47830248, 0, 
            4204047428, 32766, 446209160, 32602, 4204047632, 32766, 193244872}}
        sink_index = 4294967295
        syncid = 0
        sink_name = 0x0
        attr = {maxlength = 4294967295, tlength = 48000, prebuf = 4294967295, minreq = 4294967295, fragsize = 4204047072}
        corked = true
        no_remap = false
        no_remix = false
        fix_format = false
        fix_rate = false
        fix_channels = false
        no_move = false
        variable_rate = false
        muted = false
        adjust_latency = true
        early_requests = false
        dont_inhibit_auto_suspend = false
        volume_set = false
        muted_set = false
        fail_on_suspend = false
        relative_volume = false
        passthrough = false
        volume = {channels = 32 ' ', values = {1 <repeats 32 times>, 3.09196506e-41, 2.63240959e-23, 4.56851325e-41, 2.63490145e-23, 4.56851325e-41, 1.47136339e-43, 0, 5.60519386e-44, 0, 2.62018083e-23, 4.56851325e-41, 1.16545326e-22, 4.56851325e-41, 0, 1.96181785e-44, -3.86008481e+35, 4.59149455e-41, 9.57108149e-23, 4.56851325e-41, -nan(0x7fffff), 0, 5.73971851e-42, 0, 1.04727154e-22, 4.56851325e-41, 0, 0, 0, 0, 0, 0, 7.73516752e-43}}
        props = 0x56310baf86b0
        n_formats = 1 '\001'
        formats = <optimized out>
        stream = 0x56310baf8960
        info = {format = 4, flags = 4, rate = 1073742317, channels = 0, position = {2, 0, 193815488, 22065, 48, 48, 449783044, 32602, 4204047744, 32766, 0, 0, 196334800, 22065, 0, 0, 436113745, 32602, 194665360, 22065, 194665360, 22065, 435994628, 32602, 4204048768, 32766, 246829568, 420952383, 194343360, 22065, 194347056, 22065, 194343360, 22065, 40, 0, 6, 0, 436108696, 32602, 194346984, 22065, 435996050, 32602, 194355456, 22065, 436115278, 32602, 436131072, 32602, 105, 
            0, 40, 0, 436037769, 32602, 0, 0, 194343360, 14, 194355456, 22065, 0, 0}}
        n_params = <optimized out>
        flags = <optimized out>
        params = {0x7ffefa94baf0}
        buffer = "г\224\372\376\177\000\000\002\000\000\000\000\000\000\000\300Z\213\v1V\000\000\340s\347\032Z\177\000\000@\265\224\372\376\177\000\000\b\362\321\032Z\177\000\000\276Z\213\v1V\000\000\002\000\000\000\000\000\000\000h\r", '\000' <repeats 18 times>, "\376\177\000\000 7\254\v1V\000\000\060\000\000\000\n\000\000\000\000\000\000\000\376\177", '\000' <repeats 18 times>, "\276Z\213\v1V\000\000\000\000\000\000Z\177\000\000\004\000\000\000\000\000\000\000\377\377\377\377\377\377\377\377X\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000 p\347\032Z\177\000\000\000\000\000\000\000\000\000\000\260\213\344\032Z\177", '\000' <repeats 11 times>...
        b = {data = 0x7ffefa94ae50, size = 4096, _padding = 0, state = {offset = 0, flags = 0, frame = 0x0}, callbacks = {funcs = 0x0, data = 0x0}}
        str = <optimized out>
        __func__ = "do_create_playback_stream"
#2  0x00007f5a19dea588 in handle_packet (msg=0x56310bb3d580, client=0x56310baf65b0) at ../src/modules/module-protocol-pulse/pulse-server.c:2535
        impl = <optimized out>
        command = 3
        res = 0
        tag = 2
        impl = <optimized out>
        res = <optimized out>
        command = <optimized out>
        tag = <optimized out>
        __func__ = "handle_packet"
        _err = <optimized out>
#3  do_read (client=0x56310baf65b0) at ../src/modules/module-protocol-pulse/pulse-server.c:2658
        msg = 0x56310bb3d580
        impl = <optimized out>
        data = <optimized out>
        size = <optimized out>
        r = <optimized out>
        res = 0
        impl = <optimized out>
        data = <optimized out>
        size = <optimized out>
        r = <optimized out>
        res = <optimized out>
        __func__ = "do_read"
        idx = <optimized out>
        flags = <optimized out>
        length = <optimized out>
        channel = <optimized out>
        msg = <optimized out>
#4  on_client_data (data=0x56310baf65b0, fd=<optimized out>, mask=<optimized out>) at ../src/modules/module-protocol-pulse/pulse-server.c:2693
        client = 0x56310baf65b0
        impl = 0x56310b9a5b90
        res = <optimized out>
        __func__ = "on_client_data"
#5  0x00007f5a1b08eb7b in loop_iterate (object=0x56310b920f78, timeout=<optimized out>) at ../spa/plugins/support/loop.c:306
        s = <optimized out>
        impl = 0x56310b920f78
        loop = 0x56310b920f90
        ep = {{events = 1, data = 0x56310baf7590}, {events = 1, data = 0x56310b96a1f0}, {events = 4, data = 0x56310b96a1f0}, {events = 1, data = 0x56310b9861f0}, {events = 0, data = 0x0}, {events = 0, data = 0x0}, {events = 15, data = 0x56310b98ecc0}, {events = 194472016, data = 0x5}, {events = 434049137, data = 0x7f5a1b025259 <do_replace+153>}, {events = 1000, data = 0x56310b976280}, {events = 194472016, data = 0x100001000}, {events = 0, 
            data = 0x7f5a19df65a0 <stream_events>}, {events = 2, data = 0x800000000000000e}, {events = 0, data = 0x0}, {events = 0, data = 0x0}, {events = 0, data = 0x0}, {events = 194665056, data = 0x56310b987200}, {events = 194665056, data = 0x7f5a1b018786 <pw_impl_module_update_properties+22>}, {events = 0, data = 0x56310b9a5ae8}, {events = 194155464, data = 0x56310b9293c8}, {events = 0, data = 0x0}, {events = 0, data = 0x0}, {events = 0, data = 0x1917393f0eb65200}, {
            events = 194471856, data = 0x56310b9a5ae8}, {events = 194665056, data = 0x7ffefa94c0d0}, {events = 194472016, data = 0x56310b977530}, {events = 193815720, data = 0x7f5a1b0182e1 <pw_context_load_module+753>}, {events = 194155104, data = 0x56310b9a5a60}, {events = 0, data = 0x7f5a19de45d0 <pipewire__module_init>}, {events = 194540048, data = 0x56310b9a5ae8}, {events = 0, data = 0x0}, {events = 0, data = 0x0}}
        i = 0
        nfds = <optimized out>
#6  0x00007f5a1b015f1b in pw_main_loop_run (loop=0x56310b920e30) at ../src/pipewire/main-loop.c:156
        _f = <optimized out>
        _res = -95
        _o = <optimized out>
        res = 0
        __func__ = "pw_main_loop_run"
#7  0x000056310b86509f in main (argc=<optimized out>, argv=<optimized out>) at ../src/examples/media-session/media-session.c:2235
        impl = {this = {session = 0x0, props = 0x56310b920ce0, session_id = 0, client_session = 0x0, loop = 0x56310b920e60, context = 0x56310b929260, dbus_connection = 0x56310b9413a0, metadata = 0x56310b96a780, info = 0x56310b9b8da0}, loop = 0x56310b920e30, dbus = 0x56310b932930, monitor_core = 0x56310b944110, monitor_listener = {link = {next = 0x56310b944168, prev = 0x56310b9441b8}, cb = {funcs = 0x56310b8ca360 <monitor_core_events>, data = 0x7ffefa94c1d0}, 
            removed = 0x0, priv = 0x0}, monitor_seq = 1073741846, policy_core = 0x56310b9571c0, policy_listener = {link = {next = 0x56310b957218, prev = 0x56310b957268}, cb = {funcs = 0x56310b8ca300 <policy_core_events>, data = 0x7ffefa94c1d0}, removed = 0x0, priv = 0x0}, proxy_policy_listener = {link = {next = 0x56310b957208, prev = 0x56310b957298}, cb = {funcs = 0x56310b8ca2c0 <proxy_core_events>, data = 0x7ffefa94c1d0}, removed = 0x0, priv = 0x0}, 
          registry = 0x56310b96a260, registry_listener = {link = {next = 0x56310b96a2b8, prev = 0x56310b96a2b8}, cb = {funcs = 0x56310b8ca3f0 <registry_events>, data = 0x7ffefa94c1d0}, removed = 0x0, priv = 0x0}, globals = {items = {data = 0x56310baa7660, size = 856, alloc = 1024, extend = 64}, free_list = 4294967295}, global_list = {next = 0x56310b99fe38, prev = 0x56310baf7be8}, hooks = {list = {next = 0x56310b96a2e8, prev = 0x56310b9a5428}}, endpoint_link_list = {
            next = 0x7ffefa94c350, prev = 0x7ffefa94c350}, endpoint_links = {items = {data = 0x56310b941180, size = 0, alloc = 512, extend = 64}, free_list = 4294967295}, link_list = {next = 0x56310bad1e18, prev = 0x56310baf3aa8}, sync_list = {next = 0x7ffefa94c398, prev = 0x7ffefa94c398}, rescan_seq = 1073742388, last_seq = 1073742389, state_dir_fd = 19, state_dir = "/home/feaneron/.config/pipewire-media-session/", '\000' <repeats 4049 times>}
        support = <optimized out>
        n_support = 8
        res = <optimized out>
        c = <optimized out>
        opt_enabled = <optimized out>
        opt_disabled = 0x56310b8aede2 ""
        opt_properties = <optimized out>
        long_options = {{name = 0x56310b8b3f4a "help", has_arg = 0, flag = 0x0, val = 104}, {name = 0x56310b8b3f4f "version", has_arg = 0, flag = 0x0, val = 86}, {name = 0x56310b8b3f57 "enabled", has_arg = 1, flag = 0x0, val = 101}, {name = 0x56310b8b3f5f "disabled", has_arg = 1, flag = 0x0, val = 100}, {name = 0x56310b8b3f68 "properties", has_arg = 1, flag = 0x0, val = 112}, {name = 0x0, has_arg = 0, flag = 0x0, val = 0}}
        i = <optimized out>
        item = <optimized out>
        __func__ = "main"
Assignee
Assign to
Time tracking