Crash caused by exception thown from DMABufTextureBinder::ensure_egl_image()
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mir |
New
|
Undecided
|
Unassigned | ||
mir (Ubuntu) |
New
|
Undecided
|
Unassigned |
Bug Description
The most reliable way I have to reproduce is:
1. Run (Mir-on-X) $ miral-shell --window-manager tiling
2. Run a script that iterates over mir_demo_client_* launching all our demo clients.
The following exception causes a segfault in report_exception() - because by then the library has been unloaded:
Thread 3 "Mir/Comp" hit Catchpoint 1 (exception thrown), 0x00007ffff6ee58bd in __cxa_throw ()
from /usr/lib/
(gdb) bt
#0 0x00007ffff6ee58bd in __cxa_throw () from /usr/lib/
#1 0x00007ffff18275be in throw_exception (e=...) at /usr/include/
#2 boost::
current_
at /usr/include/
#3 0x00007ffff1822967 in (anonymous namespace)
this=<optimised out>)
at /build/
#4 0x00007ffff182308e in (anonymous namespace)
this=
#5 mir::graphics:
at /build/
#6 0x00007ffff65e402f in mir::gl:
renderable=...) at /build/
#7 0x00007ffff65fd2f9 in mir::renderer:
at /build/
#8 0x00007ffff65fd590 in mir::renderer:
at /build/
#9 0x00007ffff65a30be in composite (this=this@
scene_
at /build/
#10 0x00007ffff65a1076 in mir::compositor
at /build/
#11 0x00007ffff6601087 in std::function<void ()>::operator()() const () at /usr/include/
#12 execute (this=0x7fffef7
#13 operator() (this=0x7c4660) at /build/
#14 __invoke () at /usr/include/
#15 operator() () at /usr/include/
#16 _M_invoke () at /usr/include/
#17 operator() () at /usr/include/
#18 _M_run (this=<optimised out>) at /usr/include/
#19 0x00007ffff6f10c70 in ?? () from /usr/lib/
#20 0x00007ffff62e46fa in start_thread (arg=0x7fffef7b
#21 0x00007ffff697fb5d in clone () at ../sysdeps/
The exception comes from:
auto ret = drmPrimeHandleT oFD(drm_ fd, gem_handle, DRM_CLOEXEC, &raw_fd);
prime_ fd = mir::Fd{raw_fd};
std:: string const msg("Failed to get PRIME fd from gbm bo");
BOOST_ THROW_EXCEPTION (
std: :system_ error(errno, std::system_ category( ), "Failed to get PRIME fd from gbm bo"));
if (ret)
{
}
Is this something we should be able to handle? How and where?