Comment 0 for bug 1748330

[Impact]

When changing monitor settings unity might crash with this backtrace:

#0 0x00007f90dae11428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
#1 0x00007f90dae1302a in __GI_abort () at abort.c:89
#2 0x00007f90db44b84d in __gnu_cxx::__verbose_terminate_handler() () at ../../../../src/libstdc++-v3/libsupc++/vterminate.cc:95
#3 0x00007f90db4496b6 in __cxxabiv1::__terminate(void (*)()) (handler=<optimized out>)
    at ../../../../src/libstdc++-v3/libsupc++/eh_terminate.cc:47
#4 0x00007f90db449701 in std::terminate() () at ../../../../src/libstdc++-v3/libsupc++/eh_terminate.cc:57
#5 0x00007f90db449919 in __cxxabiv1::__cxa_throw(void*, std::type_info*, void (*)(void*)) (obj=0x246fb00, tinfo=0x7f90db731a20 <typeinfo for std::bad_function_call>, dest=0x7f90db472920 <std::bad_function_call::~bad_function_call()>)
    at ../../../../src/libstdc++-v3/libsupc++/eh_throw.cc:87
#6 0x00007f90db4728b2 in std::__throw_bad_function_call() () at ../../../../../src/libstdc++-v3/src/c++11/functexcept.cc:136
#7 0x00007f90b9a9d2cc in unity::hud::Controller::SetupWindow() (this=0x17cf688) at /usr/include/c++/5/functional:2266
#8 0x00007f90b9a9d2cc in unity::hud::Controller::SetupWindow() (this=this@entry=0x17cf420)
    at /build/unity-UBalge/unity-7.4.5+16.04.20171201.3/hud/HudController.cpp:125
#9 0x00007f90b9a9effc in unity::hud::Controller::EnsureHud() (this=this@entry=0x17cf420)
    at /build/unity-UBalge/unity-7.4.5+16.04.20171201.3/hud/HudController.cpp:200
#10 0x00007f90b9aa00e4 in unity::hud::Controller::Relayout(bool) (this=0x17cf420, check_monitor=<optimized out>)
    at /build/unity-UBalge/unity-7.4.5+16.04.20171201.3/hud/HudController.cpp:271
#11 0x00007f90b9c4d350 in unity::UScreen::Refresh() (_A_a2=..., _A_a1=@0xd08c58: 0, impl=0xd08d60)
    at /usr/include/sigc++-2.0/sigc++/signal.h:1250
#12 0x00007f90b9c4d350 in unity::UScreen::Refresh() (this=0xd08c08, _A_a2=..., _A_a1=@0xd08c58: 0)
    at /usr/include/sigc++-2.0/sigc++/signal.h:2949
#13 0x00007f90b9c4d350 in unity::UScreen::Refresh() (this=0xd08c00)
    at /build/unity-UBalge/unity-7.4.5+16.04.20171201.3/unity-shared/UScreen.cpp:191
#14 0x00007f90b9c4df9c in std::_Function_handler<bool(), unity::UScreen::Changed(GdkScreen*)::<lambda()> >::_M_invoke(const std::_Any_data &) (__closure=0x3e902a8) at /build/unity-UBalge/unity-7.4.5+16.04.20171201.3/unity-shared/UScreen.cpp:149
#15 0x00007f90b9c4df9c in std::_Function_handler<bool(), unity::UScreen::Changed(GdkScreen*)::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/5/functional:1857
#16 0x00007f90b62878ca in unity::glib::Source::SourceCallback(void*) () at /usr/lib/x86_64-linux-gnu/libunity-core-6.0.so.9
#17 0x00007f90d970604a in g_main_context_dispatch (context=0x6cb380) at /build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gmain.c:3154
#18 0x00007f90d970604a in g_main_context_dispatch (context=context@entry=0x6cb380)
    at /build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gmain.c:3769
#19 0x00007f90d97063f0 in g_main_context_iterate (context=0x6cb380, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at /build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gmain.c:3840
#20 0x00007f90d9706712 in g_main_loop_run (loop=0x6cb010) at /build/glib2.0-prJhLS/glib2.0-2.48.2/./glib/gmain.c:4034
#21 0x00007f90db79c31f in compiz::private_screen::EventManager::startEventLoop(_XDisplay*) ()
    at /usr/lib/x86_64-linux-gnu/libcompiz_core.so.ABI-20170630
#22 0x00000000004017c1 in main ()

[ Test case ]

 - Change gsetting lowgfx mode
   * gsettings set com.canonical.Unity lowgfx false
   * gsettings set com.canonical.Unity lowgfx true
 - In unity-control-center display seettings change display or scaling values
 - Unity should not crash

[ Regression potential ]

UI doesn't adapt properly to monitor changes.