From 8d508dc2fefe9745ffa9cb14e1d7519a7852aa95 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Sun, 7 Apr 2024 22:49:00 +0200 Subject: [PATCH] Fix segfault destroying libdbus connection --- CHANGELOG.md | 6 ++++++ src/common/notifications.cpp | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1739b3d..429880a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [Unreleased] + +### Fixed + +- Fixed a potential segfault when unloading yabridge. + ## [5.1.0] - 2023-12-23 ### Added diff --git a/src/common/notifications.cpp b/src/common/notifications.cpp index 403103bf..654b6c83 100644 --- a/src/common/notifications.cpp +++ b/src/common/notifications.cpp @@ -57,9 +57,19 @@ std::mutex libdbus_mutex; LIBDBUS_FUNCTIONS #undef X +/** + * The deleter used for `libdbus_connection`. `libdbus_connection` can't + * directly reference `libdbus_connection_unref` directly because it will not + * yet have been initialized until just before `libdbus_connection` gets + * initialized. + */ +static void close_dbus_connection(DBusConnection* connection) { + libdbus_connection_unref(connection); +} + std::unique_ptr libdbus_connection( nullptr, - libdbus_connection_unref); + close_dbus_connection); /** * Try to set up D-Bus. Returns `false` if a function could not be resolved or