bar: Fix crash when unplugging HDMI

There is a double delete situation which causes a SIGSEGV to happen
during destruction of bar.

This was introduced by the group feature patch.

The same object pointer is stored in two different vectors of
unique_ptr<AModule> element. Replace with shared_ptr to handle
reference counting correctly and avoid double delete.
This commit is contained in:
John Fredriksson
2021-12-03 23:56:51 +01:00
parent 9e8a71c4ef
commit f573e32d0b
2 changed files with 9 additions and 8 deletions

View File

@ -735,18 +735,19 @@ void waybar::Bar::getModules(const Factory& factory, const std::string& pos, Gtk
module = factory.makeModule(ref);
}
modules_all_.emplace_back(module);
std::shared_ptr<AModule> module_sp(module);
modules_all_.emplace_back(module_sp);
if (group) {
group->pack_start(*module, false, false);
} else {
if (pos == "modules-left") {
modules_left_.emplace_back(module);
modules_left_.emplace_back(module_sp);
}
if (pos == "modules-center") {
modules_center_.emplace_back(module);
modules_center_.emplace_back(module_sp);
}
if (pos == "modules-right") {
modules_right_.emplace_back(module);
modules_right_.emplace_back(module_sp);
}
}
module->dp.connect([module, &name] {