mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-03 09:01:54 -05:00
fix: cancel and free battery register pending call
This commit is contained in:
parent
5c9028a94d
commit
a0ac3ac8dd
2 changed files with 17 additions and 6 deletions
|
|
@ -292,6 +292,8 @@ static void on_battery_provider_registered(DBusPendingCall *pending_call,
|
||||||
reply = dbus_pending_call_steal_reply(pending_call);
|
reply = dbus_pending_call_steal_reply(pending_call);
|
||||||
dbus_pending_call_unref(pending_call);
|
dbus_pending_call_unref(pending_call);
|
||||||
|
|
||||||
|
device->battery_pending_call = NULL;
|
||||||
|
|
||||||
if (dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_ERROR) {
|
if (dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_ERROR) {
|
||||||
spa_log_error(device->monitor->log, NAME": Failed to register battery provider. Error: %s", dbus_message_get_error_name(reply));
|
spa_log_error(device->monitor->log, NAME": Failed to register battery provider. Error: %s", dbus_message_get_error_name(reply));
|
||||||
spa_log_error(device->monitor->log, NAME": BlueZ Battery Provider is not available, won't retry to register it. Make sure you are running BlueZ 5.56+ with experimental features to use Battery Provider.");
|
spa_log_error(device->monitor->log, NAME": BlueZ Battery Provider is not available, won't retry to register it. Make sure you are running BlueZ 5.56+ with experimental features to use Battery Provider.");
|
||||||
|
|
@ -315,7 +317,6 @@ static void register_battery_provider(struct spa_bt_device *device)
|
||||||
{
|
{
|
||||||
DBusMessage *method_call;
|
DBusMessage *method_call;
|
||||||
DBusMessageIter message_iter;
|
DBusMessageIter message_iter;
|
||||||
DBusPendingCall *pending_call;
|
|
||||||
|
|
||||||
method_call = dbus_message_new_method_call(
|
method_call = dbus_message_new_method_call(
|
||||||
BLUEZ_SERVICE, device->adapter_path,
|
BLUEZ_SERVICE, device->adapter_path,
|
||||||
|
|
@ -332,7 +333,7 @@ static void register_battery_provider(struct spa_bt_device *device)
|
||||||
dbus_message_iter_append_basic(&message_iter, DBUS_TYPE_OBJECT_PATH,
|
dbus_message_iter_append_basic(&message_iter, DBUS_TYPE_OBJECT_PATH,
|
||||||
&object_path);
|
&object_path);
|
||||||
|
|
||||||
if (!dbus_connection_send_with_reply(device->monitor->conn, method_call, &pending_call,
|
if (!dbus_connection_send_with_reply(device->monitor->conn, method_call, &device->battery_pending_call,
|
||||||
DBUS_TIMEOUT_USE_DEFAULT)) {
|
DBUS_TIMEOUT_USE_DEFAULT)) {
|
||||||
dbus_message_unref(method_call);
|
dbus_message_unref(method_call);
|
||||||
spa_log_error(device->monitor->log, NAME": Failed to register battery provider");
|
spa_log_error(device->monitor->log, NAME": Failed to register battery provider");
|
||||||
|
|
@ -341,17 +342,17 @@ static void register_battery_provider(struct spa_bt_device *device)
|
||||||
|
|
||||||
dbus_message_unref(method_call);
|
dbus_message_unref(method_call);
|
||||||
|
|
||||||
if (!pending_call) {
|
if (!device->battery_pending_call) {
|
||||||
spa_log_error(device->monitor->log, NAME": Failed to register battery provider");
|
spa_log_error(device->monitor->log, NAME": Failed to register battery provider");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!dbus_pending_call_set_notify(
|
if (!dbus_pending_call_set_notify(
|
||||||
pending_call, on_battery_provider_registered,
|
device->battery_pending_call, on_battery_provider_registered,
|
||||||
device, NULL)) {
|
device, NULL)) {
|
||||||
spa_log_error(device->monitor->log, "Failed to register battery provider");
|
spa_log_error(device->monitor->log, "Failed to register battery provider");
|
||||||
dbus_pending_call_cancel(pending_call);
|
dbus_pending_call_cancel(device->battery_pending_call);
|
||||||
dbus_pending_call_unref(pending_call);
|
dbus_pending_call_unref(device->battery_pending_call);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -651,6 +652,14 @@ static void device_free(struct spa_bt_device *device)
|
||||||
struct spa_bt_monitor *monitor = device->monitor;
|
struct spa_bt_monitor *monitor = device->monitor;
|
||||||
|
|
||||||
spa_log_debug(monitor->log, "%p", device);
|
spa_log_debug(monitor->log, "%p", device);
|
||||||
|
|
||||||
|
if (device->battery_pending_call) {
|
||||||
|
spa_log_debug(monitor->log, "Cancelling and freeing pending battery provider register call");
|
||||||
|
dbus_pending_call_cancel(device->battery_pending_call);
|
||||||
|
dbus_pending_call_unref(device->battery_pending_call);
|
||||||
|
device->battery_pending_call = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
battery_remove(device);
|
battery_remove(device);
|
||||||
device_stop_timer(device);
|
device_stop_timer(device);
|
||||||
device_remove(monitor, device);
|
device_remove(monitor, device);
|
||||||
|
|
|
||||||
|
|
@ -411,6 +411,8 @@ struct spa_bt_device {
|
||||||
|
|
||||||
struct spa_hook_list listener_list;
|
struct spa_hook_list listener_list;
|
||||||
bool added;
|
bool added;
|
||||||
|
|
||||||
|
DBusPendingCall *battery_pending_call;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct a2dp_codec;
|
struct a2dp_codec;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue