Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mir sometimes shuts down when moving to a different TTY when logind-driven #2661

Closed
Saviq opened this issue Sep 23, 2022 · 5 comments · Fixed by #2684
Closed

Mir sometimes shuts down when moving to a different TTY when logind-driven #2661

Saviq opened this issue Sep 23, 2022 · 5 comments · Fixed by #2684
Assignees
Labels

Comments

@Saviq
Copy link
Collaborator

Saviq commented Sep 23, 2022

Steps

  1. start a Miriway session
  2. Ctrl+Alt+F* away from it

Expected

  1. you move to the requested TTY

Current

  1. sometimes Miriway quits

Logs say:

wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.338483] < - debug - > mirserver: Received logind force-pause event for device 13:70
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.338622] < - debug - > mirserver: Received logind force-pause event for device 13:90
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.338677] < - debug - > mirserver: Received logind force-pause event for device 13:88
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.338729] < - debug - > mirserver: Received logind force-pause event for device 13:94
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.338786] < - debug - > mirserver: Received logind force-pause event for device 13:69
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.338831] < - debug - > mirserver: Received logind force-pause event for device 13:66
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.338881] < - debug - > mirserver: Received logind force-pause event for device 226:0
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.338928] < - debug - > mirserver: Received logind force-pause event for device 13:89
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.338970] < - debug - > mirserver: Received logind force-pause event for device 13:87
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.339054] < - debug - > mirserver: Received logind force-pause event for device 13:92
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.339113] < - debug - > mirserver: Received logind force-pause event for device 13:67
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.339161] < - debug - > mirserver: Received logind force-pause event for device 13:93
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.339212] < - debug - > mirserver: Received logind force-pause event for device 13:65
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.339263] < - debug - > mirserver: Received logind force-pause event for device 13:64
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.339315] < - debug - > mirserver: Received logind force-pause event for device 13:91
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.339376] < - debug - > mirserver: Received logind force-pause event for device 13:86
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.339426] < - debug - > mirserver: Received logind force-pause event for device 13:71
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.374556] < - ERROR - > gbm-kms: Failed to set DRM CRTC. Screen contents may be incomplete. Try plugging the monitor in again.
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.381696] <information> evdev-input: Removed /dev/input/event6
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.382481] <information> evdev-input: Removed /dev/input/event26: USB Keyboard
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.383523] <information> evdev-input: Removed /dev/input/event24: USB Keyboard
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.383937] <information> evdev-input: Removed /dev/input/event30: Dell Universal Receiver
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.384560] <information> evdev-input: Removed /dev/input/event5: Laptop Camera
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.385038] <information> evdev-input: Removed /dev/input/event2
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.385268] <information> evdev-input: Removed /dev/input/event25: USB Keyboard
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.385477] <information> evdev-input: Removed /dev/input/event23: HD Pro Webcam C920
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.385628] <information> evdev-input: Removed /dev/input/event28: Dell Universal Receiver
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.385732] <information> evdev-input: Removed /dev/input/event3
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.385945] <information> evdev-input: Removed /dev/input/event29: Dell Universal Receiver
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.386139] <information> evdev-input: Removed /dev/input/event1
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.386237] <information> evdev-input: Removed /dev/input/event0
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.386425] <information> evdev-input: Removed /dev/input/event27: Dell Universal Receiver
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.386590] <information> evdev-input: Removed /dev/input/event22
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.386773] <information> evdev-input: Removed /dev/input/event7
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.386669] < -warning- > gbm-kms: clear_cursor: drmModeSetCursor failed (Permission denied)
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.424291] < - ERROR - > gbm-kms: Output DisplayPort-2 has no associated CRTC to schedule page flips on
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.426600] < - debug - > mirserver: Handling Terminated from pid=369987
wrz 23 11:46:16 michal-laptop /usr/libexec/gdm-wayland-session[369987]: [2022-09-23 11:46:16.428303] <information> xwayland: Deiniting xwayland server
wrz 23 11:46:16 michal-laptop wireplumber[41595]: dbus[41595]: Attempted to unregister path (path[0] = MediaEndpoint path[1] = A2DPSink) which isn't registered
wrz 23 11:46:16 michal-laptop wireplumber[41595]: dbus[41595]: Attempted to unregister path (path[0] = MediaEndpoint path[1] = A2DPSink) which isn't registered
wrz 23 11:46:16 michal-laptop wireplumber[41595]: dbus[41595]: Attempted to unregister path (path[0] = MediaEndpoint path[1] = A2DPSink) which isn't registered
wrz 23 11:46:16 michal-laptop wireplumber[41595]: dbus[41595]: Attempted to unregister path (path[0] = MediaEndpoint path[1] = A2DPSink) which isn't registered
wrz 23 11:46:16 michal-laptop wireplumber[41595]: dbus[41595]: Attempted to unregister path (path[0] = MediaEndpoint path[1] = A2DPSink) which isn't registered
wrz 23 11:46:16 michal-laptop wireplumber[41595]: dbus[41595]: Attempted to unregister path (path[0] = MediaEndpoint path[1] = A2DPSink) which isn't registered
wrz 23 11:46:16 michal-laptop wireplumber[41595]: dbus[41595]: Attempted to unregister path (path[0] = MediaEndpoint path[1] = A2DPSink) which isn't registered
wrz 23 11:46:16 michal-laptop wireplumber[41595]: dbus[41595]: Attempted to unregister path (path[0] = MediaEndpoint path[1] = A2DPSink) which isn't registered
wrz 23 11:46:16 michal-laptop wireplumber[41595]: dbus[41595]: Attempted to unregister path (path[0] = MediaEndpoint path[1] = A2DPSink) which isn't registered
wrz 23 11:46:16 michal-laptop wireplumber[41595]: dbus[41595]: Attempted to unregister path (path[0] = MediaEndpoint path[1] = A2DPSink) which isn't registered

@AlanGriffiths
Copy link
Collaborator

Well, I couldn't (yet) reproduce #2674, but I tried switching VT a few times with gdb attached to miriway-shell and got:

Thread 1 "miriway-shell" received signal SIGTERM, Terminated.
syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
38	../sysdeps/unix/sysv/linux/x86_64/syscall.S: No such file or directory.
(gdb) 

@AlanGriffiths
Copy link
Collaborator

At the end of the miriway log there's an exception thrown from: /home/alan/display_server/mir1/src/platforms/common/server/kms-utils/kms_connector.cpp(127). (But, sadly, C++ doesn't attach a call stack to exceptions.)

Anyway, poking around the code I found:

bool mgg::RealKMSOutput::set_crtc(FBHandle const& fb)
{
    if (!ensure_crtc())
    {
        mir::log_error("Output %s has no associated CRTC to set a framebuffer on",
                       mgk::connector_name(connector).c_str());
        return false;
    }

Now, I think this is wrong: ensure_crtc() calls (indirectly) find_crtc_and_index_for_connector() from which the exception is thrown and the failure mode is not a false return, but an exception. Compare with another use:

void mgg::RealKMSOutput::clear_crtc()
{
    try
    {
        ensure_crtc();
    }
    catch (...)
    {

Strangely, for a function that is expected to (and does) sometimes fail through an exception, RealKMSOutput::ensure_crtc() returns a bool indicating success.

@AlanGriffiths
Copy link
Collaborator

OK, got a stack trace.

Also worth noting I only seem to hit this error after:

  1. the display times out and is woken; and, only then,
  2. VT switch
Thread 36 "Mir/Comp" hit Breakpoint 1, (anonymous namespace)::find_crtc_and_index_for_connector (resources=..., connector=std::unique_ptr<_drmModeConnector> = {...}) at /home/alan/display_server/mir1/src/platforms/common/server/kms-utils/kms_connector.cpp:127
127	    BOOST_THROW_EXCEPTION(std::runtime_error{"Failed to find CRTC"});
(gdb) bt
#0  (anonymous namespace)::find_crtc_and_index_for_connector(mir::graphics::kms::DRMModeResources const&, mir::graphics::kms::DRMModeConnectorUPtr const&)
    (resources=..., connector=std::unique_ptr<_drmModeConnector> = {...})
    at /home/alan/display_server/mir1/src/platforms/common/server/kms-utils/kms_connector.cpp:127
#1  0x00007f83decaab0f in mir::graphics::kms::find_crtc_for_connector(int, std::unique_ptr<_drmModeConnector, std::function<void (_drmModeConnector*)> > const&)
    (drm_fd=11, connector=std::unique_ptr<_drmModeConnector> = {...})
    at /home/alan/display_server/mir1/src/platforms/common/server/kms-utils/kms_connector.cpp:145
#2  0x00007f83dec67ca1 in mir::graphics::gbm::RealKMSOutput::ensure_crtc() (this=0x55564e1c0070)
    at /home/alan/display_server/mir1/src/platforms/gbm-kms/server/kms/real_kms_output.cpp:322
#3  0x00007f83dec67340 in mir::graphics::gbm::RealKMSOutput::set_crtc(mir::graphics::gbm::FBHandle const&) (this=0x55564e1c0070, fb=...)
    at /home/alan/display_server/mir1/src/platforms/gbm-kms/server/kms/real_kms_output.cpp:153
#4  0x00007f83dec4b727 in mir::graphics::gbm::DisplayBuffer::set_crtc(mir::graphics::gbm::FBHandle const&) (this=0x55564e23ec30, forced_frame=...)
    at /home/alan/display_server/mir1/src/platforms/gbm-kms/server/kms/display_buffer.cpp:577
#5  0x00007f83dec4b9b3 in mir::graphics::gbm::DisplayBuffer::post() (this=0x55564e23ec30)
    at /home/alan/display_server/mir1/src/platforms/gbm-kms/server/kms/display_buffer.cpp:621
#6  0x00007f83e0a331fb in mir::compositor::CompositingFunctor::operator()() (this=0x55564e3c4d30)
    at /home/alan/display_server/mir1/src/server/compositor/multi_threaded_compositor.cpp:149
#7  0x00007f83e0a39689 in std::__invoke_impl<void, mir::compositor::CompositingFunctor&>(std::__invoke_other, mir::compositor::CompositingFunctor&) (__f=...) at /usr/include/c++/12/bits/invoke.h:61
#8  0x00007f83e0a394e3 in std::__invoke<mir::compositor::CompositingFunctor&>(mir::compositor::CompositingFunctor&) (__fn=...) at /usr/include/c++/12/bits/invoke.h:96
#9  0x00007f83e0a38c30 in std::reference_wrapper<mir::compositor::CompositingFunctor>::operator()<>() const (this=0x7f83740c1a00) at /usr/include/c++/12/bits/refwrap.h:358
#10 0x00007f83e0a38226 in std::__invoke_impl<void, std::reference_wrapper<mir::compositor::CompositingFunctor>&>(std::__invoke_other, std::reference_wrapper<mir::compositor::CompositingFunctor>&) (__f=...)
    at /usr/include/c++/12/bits/invoke.h:61
#11 0x00007f83e0a37354 in std::__invoke_r<void, std::reference_wrapper<mir::compositor::CompositingFunctor>&>(std::reference_wrapper<mir::compositor::CompositingFunctor>&) (__fn=...)
    at /usr/include/c++/12/bits/invoke.h:111
#12 0x00007f83e0a363b8 in std::_Function_handler<void (), std::reference_wrapper<mir::compositor::CompositingFunctor> >::_M_invoke(std::_Any_data const&) (__functor=...)
    at /usr/include/c++/12/bits/std_function.h:290
#13 0x00007f83e1692b4a in std::function<void ()>::operator()() const (this=0x7f83740c1a00)
    at /usr/include/c++/12/bits/std_function.h:591
#14 0x00007f83e16aa97f in operator()() (__closure=0x7f83740c19e0)
    at /home/alan/display_server/mir1/src/common/thread_pool_executor.cpp:266
#15 0x00007f83e16acfd4 in std::__invoke_impl<void, (anonymous namespace)::ThreadPool::spawn(std::function<void()>&&)::<lambda()>&>(std::__invoke_other, struct {...} &) (__f=...)
    at /usr/include/c++/12/bits/invoke.h:61
#16 0x00007f83e16ac723 in std::__invoke_r<void, (anonymous namespace)::ThreadPool::spawn(std::function<void()>&&)::<lambda()>&>(struct {...} &) (__fn=...) at /usr/include/c++/12/bits/invoke.h:111
#17 0x00007f83e16abe98 in std::_Function_handler<void(), (anonymous namespace)::ThreadPool::spawn(std::function<void()>&&)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...)
    at /usr/include/c++/12/bits/std_function.h:290
#18 0x00007f83e1692b4a in std::function<void ()>::operator()() const (this=0x7f835effc2c0)
    at /usr/include/c++/12/bits/std_function.h:591
#19 0x00007f83e16aa529 in (anonymous namespace)::Worker::work_loop((anonymous namespace)::Worker*, std::promise<std::atomic<bool>*>&&) (me=0x55564e51c390, shutdown_channel=...)
    at /home/alan/display_server/mir1/src/common/thread_pool_executor.cpp:184
#20 0x00007f83e16ae069 in std::__invoke_impl<void, void (*)((anonymous namespace)::Worker*, std::promise<std::atomic<bool>*>&&), (anonymous namespace)::Worker*, std::promise<std::atomic<bool>*> >(std::__invoke_other, void (*&&)((anonymous namespace)::Worker*, std::promise<std::atomic<bool>*>&&))
     (__f=@0x55564e1a59e8: 0x7f83e16aa44d <(anonymous namespace)::Worker::work_loop((anonymous namespace)::Worker*, std::promise<std::atomic<bool>*>&&)>) at /usr/include/c++/12/bits/invoke.h:61
#21 0x00007f83e16adfdf in std::__invoke<void (*)((anonymous namespace)::Worker*, std::promise<std::atomic<bool>*>&&), (anonymous namespace)::Worker*, std::promise<std::atomic<bool>*> >(void (*&&)((anonymous namespace)::Worker*, std::promise<std::atomic<bool>*>&&))
     (__fn=@0x55564e1a59e8: 0x7f83e16aa44d <(anonymous namespace)::Worker::work_loop((anonymous namespace)::Worker*, std::promise<std::atomic<bool>*>&&)>) at /usr/include/c++/12/bits/invoke.h:96
#22 0x00007f83e16adef7 in std::thread::_Invoker<std::tuple<void (*)((anonymous namespace)::Worker*, std::promise<std::atomic<bool>*>&&), (anonymous namespace)::Worker*, std::promise<std::atomic<bool>*> > >::_M_invoke<0, 1, 2>(std::_Index_tuple<0, 1, 2>) (this=0x55564e1a59c8)
    at /usr/include/c++/12/bits/std_thread.h:252
#23 0x00007f83e16ade7a in std::thread::_Invoker<std::tuple<void (*)((anonymous namespace)::Worker*, std::promise<std::atomic<bool>*>&&), (anonymous namespace)::Worker*, std::promise<std::atomic<bool>*> > >::operator()() (this=0x55564e1a59c8) at /usr/include/c++/12/bits/std_thread.h:259
#24 0x00007f83e16ade24 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)((anonymous namespace)::Worker*, std::promise<std::atomic<bool>*>&&), (anonymous namespace)::Worker*, std::promise<std::atomic<bool>*> > > >::_M_run() (this=0x55564e1a59c0) at /usr/include/c++/12/bits/std_thread.h:210
#25 0x00007f83e14dc3a3 in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#26 0x00007f83e10902a2 in start_thread (arg=<optimised out>) at ./nptl/pthread_create.c:442
#27 0x00007f83e111f260 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
(gdb) c
Continuing.
[Thread 0x7f835cffb6c0 (LWP 38762) exited]

Thread 1 "miriway-shell" received signal SIGTERM, Terminated.
[Switching to Thread 0x7f83dfd11200 (LWP 38559)]
__futex_abstimed_wait_common64 (private=128, cancel=true, abstime=0x0, op=265, expected=38762, futex_word=0x7f835cffb990) at ./nptl/futex-internal.c:57
57	./nptl/futex-internal.c: No such file or directory.

So the failure mode makes sense:

The exception propagates to CompositingFunctor::operator() which calls mir::terminate_with_current_exception() and that sends SIGTERM.

(I've yet to figure out what should be happening in this code, but it is definitely wrong.)

@AlanGriffiths
Copy link
Collaborator

My suspicion (to be confirmed tomorrow) is that the idle/wake cycle isn't maintaining invariants somewhere and that is what provokes the initial "Failed to find CRTC" exception.

I don't think we can actually recover completely after this happens (there's nothing to composite to). But we can certainly decide whether ensure_crtc(); fails through a return code or through an exception.

@AlanGriffiths
Copy link
Collaborator

AlanGriffiths commented Sep 30, 2022

Hmm, this also has something to do with client activity.

So I've "fixed" ensure_crtc(); to trap the exception and return false. And that behaves better.

But if I have, say, glmark2-wayland running switching back to the VT doesn't seem to work until an idle timeout (after which the screen blanks and normal service is resumed)

[edit]

Forcing a display configuration change by plugging in another monitor also restores normality. So the condition leading to "Failed to find CRTC" is recoverable. (But not in the immediate context of the exception.)

AlanGriffiths added a commit that referenced this issue Sep 30, 2022
@bors bors bot closed this as completed in fb6b987 Oct 6, 2022
@Saviq Saviq mentioned this issue Oct 10, 2022
bors bot added a commit that referenced this issue Oct 26, 2022
2715: Release/2.10 (reboot) r=Saviq a=AlanGriffiths

- ABI summary:
  - miral ABI unchanged at 5
  - mircommon ABI unchanged at 9
  - mircookie ABI unchanged at 2
  - mircore ABI unchanged at 2
  - miroil ABI unchanged at 2
  - mirplatform ABI unchanged at 23
  - mirserver ABI unchanged at 58
  - mirwayland ABI unchanged at 3
  - mirplatformgraphics ABI unchanged at 20
  - mirinputplatform ABI unchanged at 8
- Enhancements:
  - Verify wl_pointer.set_cursor() serial matches latest
    wl_pointer.enter() serial (#2532)
  - MinimalWindowManager: allow moving window from the maximized
    state (#2593)
  - X11 platform: send discrete scroll (#2579)
  - Verify serials for move/resize requests (#2622)
  - Modernize touch events (#2623)
  - Implement Modifier+Drag window move gesture (#2626)
  - Improve Client class lifetime management (#2644)
  - Implement X11 platform pixel format selection correctly (#2648)
  - Deactivate text input in destructor for v1 and v2 protocols (#2657)
  - gbm-kms/quirks: Quirk off AST devices (#2679)
- Bugs fixed:
  - Incorrect rendering when a surface spans multiple outputs (#1753)
  - [Xwayland] weird focus problems with CLion (#2255)
  - Maximized windows end up behind panels after screen going off (#2580)
  - Menus of panels don't close when losing (or don't lose) focus (#2585)
  - CapsLock state gets stuck (#2592)
  - Popups dismissed by Mir when parent clicked (#2604)
  - Latest swaybg (on 22.10) doesn't paint on Mir (#2620)
  - Shutdown crash when OSK is running (#2639) 
  - Cursor only updates once per enter on XWayland (#2643)
  - OSK stays on screen with unfocused app (#2651)
  - Scaling messes up screencopy (#2653)
  - Mir sometimes shuts down when moving to a different TTY when
    logind-driven (#2661)
  - Bug in implementation of xdg_output (#2666)
  - Waking screens up after idle-timeout often stops
    or locks Mir up (#2674)
  - In CLion cut & paste only works up to the last \n in the source
    text (#2677)

Co-authored-by: Michał Sawicz (Saviq) <[email protected]>
Co-authored-by: Alan Griffiths <[email protected]>
bors bot added a commit that referenced this issue Oct 26, 2022
2715: Release/2.10 (reboot) r=Saviq a=AlanGriffiths

- ABI summary:
  - miral ABI unchanged at 5
  - mircommon ABI unchanged at 9
  - mircookie ABI unchanged at 2
  - mircore ABI unchanged at 2
  - miroil ABI unchanged at 2
  - mirplatform ABI unchanged at 23
  - mirserver ABI unchanged at 58
  - mirwayland ABI unchanged at 3
  - mirplatformgraphics ABI unchanged at 20
  - mirinputplatform ABI unchanged at 8
- Enhancements:
  - Verify wl_pointer.set_cursor() serial matches latest
    wl_pointer.enter() serial (#2532)
  - MinimalWindowManager: allow moving window from the maximized
    state (#2593)
  - X11 platform: send discrete scroll (#2579)
  - Verify serials for move/resize requests (#2622)
  - Modernize touch events (#2623)
  - Implement Modifier+Drag window move gesture (#2626)
  - Improve Client class lifetime management (#2644)
  - Implement X11 platform pixel format selection correctly (#2648)
  - Deactivate text input in destructor for v1 and v2 protocols (#2657)
  - gbm-kms/quirks: Quirk off AST devices (#2679)
- Bugs fixed:
  - Incorrect rendering when a surface spans multiple outputs (#1753)
  - [Xwayland] weird focus problems with CLion (#2255)
  - Maximized windows end up behind panels after screen going off (#2580)
  - Menus of panels don't close when losing (or don't lose) focus (#2585)
  - CapsLock state gets stuck (#2592)
  - Popups dismissed by Mir when parent clicked (#2604)
  - Latest swaybg (on 22.10) doesn't paint on Mir (#2620)
  - Shutdown crash when OSK is running (#2639) 
  - Cursor only updates once per enter on XWayland (#2643)
  - OSK stays on screen with unfocused app (#2651)
  - Scaling messes up screencopy (#2653)
  - Mir sometimes shuts down when moving to a different TTY when
    logind-driven (#2661)
  - Bug in implementation of xdg_output (#2666)
  - Waking screens up after idle-timeout often stops
    or locks Mir up (#2674)
  - In CLion cut & paste only works up to the last \n in the source
    text (#2677)

Co-authored-by: Michał Sawicz (Saviq) <[email protected]>
Co-authored-by: Alan Griffiths <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants