← Back to team overview

touch-packages team mailing list archive

[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