touch-packages team mailing list archive
-
touch-packages team
-
Mailing list archive
-
Message #46090
[Bug 1396006] Re: Input/event driven clients may freeze indefinitely
** Changed in: mir
Status: Fix Committed => Fix Released
** Also affects: mir (Ubuntu)
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to mir in Ubuntu.
https://bugs.launchpad.net/bugs/1396006
Title:
Input/event driven clients may freeze indefinitely
Status in Mir:
Fix Released
Status in mir package in Ubuntu:
New
Bug description:
Input/event driven clients may freeze indefinitely. This is a more
generalized form of bug 1379685 that can happen with any windowed app
too.
The issue is:
if (!ready_to_composite_queue.empty())
drop_frame(std::move(lock));
may drop the newest available frame in some cases:
(ready_to_composite_queue.size() == 1 &&
contains(current_compositor_buffer, buffers_sent_to_compositor))
So when this happens, we're dropping the latest frame without any
guarantees that the client will redraw another. Because a perfectly
efficient event-driven app will only redraw when something changes
(e.g. input event) and won't redraw just because a new buffer is
available. So giving a buffer back to the client won't wake it up.
The simple answer is to ensure you only drop frames when it's proven
that you're not dropping the newest one. Because the time to the next
frame after that is completely unpredictable and indefinite...
if (ready_to_composite_queue.size() > 1)
drop_frame(std::move(lock)); // worst case: the newest frame still gets composited.
To manage notifications about this bug go to:
https://bugs.launchpad.net/mir/+bug/1396006/+subscriptions