Android USC crash on multimonitor unplug [std::exception::what: error during hwc prepare()]

Bug #1474891 reported by Gerry Boland
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Mir
Fix Released
High
Kevin DuBois
Unity System Compositor
Invalid
Undecided
Unassigned
mir (Ubuntu)
Fix Released
Undecided
Unassigned

Bug Description

I've a slightly customized USC built in Silo0. On top of that, a multimonitor-aware unity8 is running.
http://people.canonical.com/~platform/citrain_dashboard/#?q=ubuntu/landing-000

On Android devices, Nexus 4 & 7, I occasionally get a crash on external monitor unplug. Here is the relevant log:

ERROR: /build/mir-UAyS26/mir-0.13.4+15.04.20150709.2/src/platforms/android/server/real_hwc_wrapper.cpp(123): Throw in function virtual void mir::graphics::android::RealHwcWrapper::set(const std::array<hwc_display_contents_1*, 3u>&) const
Dynamic exception type: N5boost16exception_detail10clone_implINS0_19error_info_injectorISt13runtime_errorEEEE
std::exception::what: error during hwc prepare(). rc = ffffffff

Related branches

Gerry Boland (gerboland)
tags: added: pd
Kevin DuBois (kdub)
Changed in mir:
assignee: nobody → Kevin DuBois (kdub)
Revision history for this message
Gerry Boland (gerboland) wrote :

Desktop is stable, I can't get it to fail.
The Android bug does not always hit, only occasionally. Happens on both N4 & N7, maybe more often on N4.

Kevin DuBois (kdub)
Changed in mir:
importance: Undecided → High
status: New → In Progress
Revision history for this message
Kevin DuBois (kdub) wrote :

seems a race between the mir main EventLoop, and the driver's notification thread, and the compositing thread. Still on the case, hampered a bit today by low batteries and slimports not charging the device

summary: - USC crash on multimonitor unplug
+ USC crash on multimonitor unplug [std::exception::what: error during hwc
+ prepare()]
Changed in mir:
milestone: none → 0.15.0
tags: added: android multimonitor
Revision history for this message
Kevin DuBois (kdub) wrote : Re: USC crash on multimonitor unplug [std::exception::what: error during hwc prepare()]

So, what seems to be happening on these drivers is that the hotplug-unplug event comes in while the driver is doing work in hwc::set() with an external list. Since the driver cannot post the list to the display anymore (as its physically disconnected), hwc::set() returns -1. At that point, mir throws up the compositor thread (which is trying to be shut down anyways at this point), and the exception is caught, which terminates the server. Given that the thread that gets the throw is shutting down anyways, we can ignore the exception.

Revision history for this message
Kevin DuBois (kdub) wrote :

Attached my branch that should avert it, doing some more testing on it before proposing.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

Fix committed into lp:mir at revision None, scheduled for release in mir, milestone 0.15.0

Changed in mir:
status: In Progress → Fix Committed
Changed in unity-system-compositor:
status: New → Invalid
summary: - USC crash on multimonitor unplug [std::exception::what: error during hwc
- prepare()]
+ Android USC crash on multimonitor unplug [std::exception::what: error
+ during hwc prepare()]
Revision history for this message
Launchpad Janitor (janitor) wrote :
Download full text (4.2 KiB)

This bug was fixed in the package mir - 0.15.0+15.10.20150818-0ubuntu1

---------------
mir (0.15.0+15.10.20150818-0ubuntu1) wily; urgency=medium

  [ Daniel van Vugt ]
  * New upstream release 0.15.0 (https://launchpad.net/mir/+milestone/0.15.0)
    - ABI summary: Only servers and graphics drivers need rebuilding;
      . Mirclient ABI unchanged at 9
      . Mirserver ABI bumped to 33
      . Mircommon ABI unchanged at 5
      . Mirplatform ABI bumped to 9
    - Enhancements:
      . Add support for Mir-on-X11.
      . Latency reduction optimizations (around ~15ms reduction in total):
        Reduced input event resampling latency by 5ms. Reduced output latency
        (in system compositors) by around 10ms with the introduction of
        "predictive bypass". And we're not finished; future Mir releases
        should reduce latency further.
      . Introduced a python3-based Mir performance framework.
      . Lots of preparation for an architectural overhaul of buffer swapping,
        required in the least to support future optimizations like nested
        bypass.
      . Added a new cursor: crosshair
      . Added support for 15/16-bit client pixel formats ("high colour").
      . Added a new client function to make picking the right pixel format
        for a given EGLConfig super simple: mir_connection_get_egl_pixel_format
      . Added application-not-responding detection
      . Added client API for specifying input region shape.
      . Fixed the remaining threading flaws identified by ThreadSanitizer and
        turned it on permanently for all continuous integration in future.
      . Added support for relative pointer motion events (e.g. for gaming).
    - Bug fixes:
      . Fix focus issues breaking autopilot tests entering text (LP: #1468029)
      . Fix mir tests failure on armhf with GCC5 (LP: #1478213)
      . mir_buffer_stream_swap_buffers_sync can hang constraints (LP: #1479899)
      . Loading libmirclient.so twice leads to a segfault in libmirprotobuf.so
        (LP: #1391976)
      . Visible corruption in SDL apps (LP: #1460149)
      . MultiThreadedCompositor::destroy_compositing_threads hangs/deadlocks on
        shutdown or display reconfiguration (LP: #1471909)
      . ctest/"make test" reports 100% tests pass even when some fail.
        (LP: #1472911)
      . Mir server crashed - GLib-CRITICAL **: g_source_get_context: assertion
       'source->context != NULL || !SOURCE_DESTROYED (source)' failed
        (LP: #1473869)
      . USC crash on multimonitor unplug [std::exception::what: error during
        hwc prepare()] (LP: #1474891)
      . [regression] Input focus delay after switching app back into focus
        (LP: #1480654)
      . GLibMainLoopTest.propagates_exception_from_server_action fails with
        GCC 5 in armhf (LP: #1482274)
      . [enhancement] Mir lacks relative mouse support (LP: #1276322)
      . ShmBuffer ignores pixel_format (LP: #1424909)
      . Fullscreen bypassed clients stutter with double buffers when other
        clients are running (LP: #1447896)
      . [regression] Demo servers crash on start-up if MIR_ENABLE_TESTS=OFF
        (LP: #1439078)
      . [regression] The software curs...

Read more...

Changed in mir (Ubuntu):
status: New → Fix Released
Changed in mir:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.