I don't think MultiThreadedCompositor::start()/stop() locking is the real issue. They are only called by MirScreen's "*_l()" functions which (if I understand the convention correctly) should only be invoked under lock of its mutex.
However, usc::MirScreen::power_off_alarm_notification() calls configure_display_l() without first acquiring a lock. (Which shows how fragile this convention is.)
I don't think MultiThreadedCo mpositor: :start( )/stop( ) locking is the real issue. They are only called by MirScreen's "*_l()" functions which (if I understand the convention correctly) should only be invoked under lock of its mutex.
However, usc::MirScreen: :power_ off_alarm_ notification( ) calls configure_ display_ l() without first acquiring a lock. (Which shows how fragile this convention is.)