Mir

MultiThreadedCompositor::destroy_compositing_threads hangs/deadlocks on shutdown or display reconfiguration

Bug #1471909 reported by Gerry Boland
14
This bug affects 2 people
Affects Status Importance Assigned to Milestone
Mir
Fix Released
High
Mir development team
0.13
Won't Fix
High
Unassigned
0.14
Won't Fix
High
Unassigned
mir (Ubuntu)
Fix Released
High
Unassigned

Bug Description

Try revision 211 of lp:~unity-team/unity-system-compositor/toggle-cursor2/

The desire was to resize all surfaces to the size of the smallest attached display.

usc::WindowManager implements the mir::shell::WindowManagement interface. I thought it logical to implement this resizing in add_display. However it causes a deadlock when plugging in a second display, while the compositor is stopping, see this backtrace:

http://pastebin.ubuntu.com/11831907/

I suspect Threads 8 and Thread 1 are blocking eachother.

Related branches

Gerry Boland (gerboland)
description: updated
Revision history for this message
Gerry Boland (gerboland) wrote :

It should be noted I'm working against this mir branch: https://code.launchpad.net/~andreas-pokorny/mir/override-orientation/+merge/263638

Revision history for this message
Daniel van Vugt (vanvugt) wrote :

It's really just a hang. Not a deadlock. There's only one lock involved...

The offending hang location (which also holds up other threads) is in MultiThreadedCompositor::destroy_compositing_threads:

    for (auto& f : futures)
        f.wait();

I'm not familiar with that bit yet. Think it was added relatively recently.

Changed in mir:
importance: Undecided → High
Revision history for this message
Daniel van Vugt (vanvugt) wrote : Re: WM::add_display - trying to resize a surface here causes hang MultiThreadedCompositor on display reconfiguration (hotplugging)

OK, seems like a basic locking mistake...

summary: - WM::add_display - tryingto resize a surface here causes deadlock
+ WM::add_display - trying to resize a surface here causes hang
+ MultiThreadedCompositor on display reconfiguration (hotplugging)
tags: added: android multimonitor
Changed in mir:
milestone: none → 0.15.0
assignee: nobody → Daniel van Vugt (vanvugt)
status: New → Triaged
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

You're right. It seems to be a deadlock. There's only one mutex but it's deadlocked with the futures "f.wait()".

summary: - WM::add_display - trying to resize a surface here causes hang
- MultiThreadedCompositor on display reconfiguration (hotplugging)
+ WM::add_display - trying to resize a surface here causes hang/deadlock
+ in MultiThreadedCompositor on display reconfiguration (hotplugging)
Changed in mir:
status: Triaged → In Progress
summary: - WM::add_display - trying to resize a surface here causes hang/deadlock
- in MultiThreadedCompositor on display reconfiguration (hotplugging)
+ MultiThreadedCompositor::destroy_compositing_threads hangs/deadlocks on
+ shutdown or display reconconfiguration
summary: MultiThreadedCompositor::destroy_compositing_threads hangs/deadlocks on
- shutdown or display reconconfiguration
+ shutdown or display reconfiguration
Changed in mir (Ubuntu):
status: New → Triaged
importance: Undecided → High
Revision history for this message
Daniel van Vugt (vanvugt) wrote :

Simplified stacks attached.

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 mir:
assignee: Daniel van Vugt (vanvugt) → Alexandros Frantzis (afrantzis)
Changed in mir:
assignee: Alexandros Frantzis (afrantzis) → Mir development team (mir-team)
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: Triaged → 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.

Duplicates of this bug

Other bug subscribers

Remote bug watches

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