Skip to content

[Bug]: weweb renderer segfaults in libcef on Shutdown when the compositor has no wl_seat #139

Description

@wehrwolfmann

Summary

The web renderer dies with SIGSEGV inside libcef.so every time the daemon stops it on a compositor without a seat. I hit it on weston --backend=headless: switching wallpapers crashes it, and so does the 15 s first-frame timeout, since both end in Shutdown -> host.Shutdown() -> CefShutdown() (web_entry.cpp:823) while the browser is still open. A plain SIGTERM doesn't crash.

Reproduction

weston --backend=headless --renderer=noop --shell=kiosk --socket=wayland-x &
WAYLAND_DISPLAY=wayland-x waywallen --no-ui --no-display &
# display client: waywallen_display_demo (needs waywallen/waywallen#265 to pair with weweb at all)
# apply a web wallpaper, then apply another one (or just wait for the first-frame timeout)

15 of 15 stops on that weston crashed, always at the same pc. Same weston with --fake-seat: 0 of 5. kwin_wayland --virtual: 0 of 3.

Renderer

Web wallpaper

Run mode

Waywallen plugin

Workshop item

n/a (trivial CSS animation page)

Install source

Release plugin archive

Open Wallpaper Engine version

0.2.9 (054ee06); the web shutdown path is the same on main 5d2d931

Linux distribution

CachyOS, kernel 7.2.4, waywallen 0.3.9 (f99ec40)

GPU and driver

AMD Radeon 780M, Mesa 26.2.2, CEF 149.0.4+g2f1bfd8

Logs

INFO weweb-renderer: ERROR:content/browser/browser_main_loop.cc:274] Gdk: gdk_seat_get_keyboard: assertion 'GDK_IS_SEAT (seat)' failed
INFO waywallen::wallframe::renderer_manager: renderer 6da5afa8-...: Ready (drm_render=226:128)
WARN waywallen::wallframe::renderer_manager::writer: renderer 6da5afa8-...: writer exit: syscall: EPIPE: Broken pipe
INFO waywallen::wallframe::renderer_manager: renderer 6da5afa8-...: shutdown complete
ERROR waywallen::api::websocket::wire: request 101 failed: renderer did not produce a frame: timed out after 15s

waywallen-weweb[1565254]: segfault at 18 ip 00007fc994dca654 sp 00007ffda4596380 error 4 in libcef.so[39c9654,7fc993de9000+be0d000]
waywallen-weweb[1568604]: segfault at 18 ip 00007fba14fca654 sp 00007fffcec7db90 error 4 in libcef.so[39c9654,7fba13fe9000+be0d000]

Additional context

Faulting instruction is mov 0x18(%rax),%r15 with rax = 0. No symbols are published for this CEF build, so only frame 0 is trustworthy. Every seatless run prints the GDK_IS_SEAT assertion at startup, the runs with a seat never do. The daemon also logs "shutdown complete" for a renderer that just segfaulted.

Nobody runs a real session without a seat, so this is low priority. Would you rather guard it on your side (close the browser and wait for OnBeforeClose before CefShutdown), or should it go to CEF?

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions