mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	spa: bluez: add steal_reply_and_unref() helper
				
					
				
			This function retrieves the reply from a DBusPendingCall and unrefs the call.
This commit is contained in:
		
							parent
							
								
									183270f53c
								
							
						
					
					
						commit
						708e5443ae
					
				
					 7 changed files with 33 additions and 58 deletions
				
			
		| 
						 | 
				
			
			@ -18,6 +18,7 @@
 | 
			
		|||
#include <spa/param/audio/raw.h>
 | 
			
		||||
 | 
			
		||||
#include "defs.h"
 | 
			
		||||
#include "dbus-helpers.h"
 | 
			
		||||
 | 
			
		||||
static struct spa_log_topic log_topic = SPA_LOG_TOPIC(0, "spa.bluez5.hsphfpd");
 | 
			
		||||
#undef SPA_LOG_TOPIC_DEFAULT
 | 
			
		||||
| 
						 | 
				
			
			@ -846,7 +847,7 @@ static void hsphfpd_audio_acquire_reply(DBusPendingCall *pending, void *user_dat
 | 
			
		|||
 | 
			
		||||
	backend->acquire_in_progress = false;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
	r = steal_reply_and_unref(&pending);
 | 
			
		||||
	if (r == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -889,7 +890,6 @@ static void hsphfpd_audio_acquire_reply(DBusPendingCall *pending, void *user_dat
 | 
			
		|||
 | 
			
		||||
finish:
 | 
			
		||||
	dbus_message_unref(r);
 | 
			
		||||
	dbus_pending_call_unref(pending);
 | 
			
		||||
 | 
			
		||||
	if (ret < 0)
 | 
			
		||||
		spa_bt_transport_set_state(transport, SPA_BT_TRANSPORT_STATE_ERROR);
 | 
			
		||||
| 
						 | 
				
			
			@ -1179,7 +1179,7 @@ static void hsphfpd_get_endpoints_reply(DBusPendingCall *pending, void *user_dat
 | 
			
		|||
	DBusMessage *r;
 | 
			
		||||
	DBusMessageIter i, array_i;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
	r = steal_reply_and_unref(&pending);
 | 
			
		||||
	if (r == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1212,7 +1212,6 @@ static void hsphfpd_get_endpoints_reply(DBusPendingCall *pending, void *user_dat
 | 
			
		|||
 | 
			
		||||
finish:
 | 
			
		||||
	dbus_message_unref(r);
 | 
			
		||||
	dbus_pending_call_unref(pending);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int backend_hsphfpd_register(void *data)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,6 +33,7 @@
 | 
			
		|||
#include <libusb.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "dbus-helpers.h"
 | 
			
		||||
#include "modemmanager.h"
 | 
			
		||||
#include "upower.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2413,7 +2414,7 @@ static void register_profile_reply(DBusPendingCall *pending, void *user_data)
 | 
			
		|||
	struct impl *backend = user_data;
 | 
			
		||||
	DBusMessage *r;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
	r = steal_reply_and_unref(&pending);
 | 
			
		||||
	if (r == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2431,9 +2432,8 @@ static void register_profile_reply(DBusPendingCall *pending, void *user_data)
 | 
			
		|||
		goto finish;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
      finish:
 | 
			
		||||
finish:
 | 
			
		||||
	dbus_message_unref(r);
 | 
			
		||||
        dbus_pending_call_unref(pending);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int register_profile(struct impl *backend, const char *profile, const char *uuid)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,6 +22,7 @@
 | 
			
		|||
#include <spa/param/audio/raw.h>
 | 
			
		||||
 | 
			
		||||
#include "defs.h"
 | 
			
		||||
#include "dbus-helpers.h"
 | 
			
		||||
 | 
			
		||||
#define INITIAL_INTERVAL_NSEC	(500 * SPA_NSEC_PER_MSEC)
 | 
			
		||||
#define ACTION_INTERVAL_NSEC	(3000 * SPA_NSEC_PER_MSEC)
 | 
			
		||||
| 
						 | 
				
			
			@ -633,7 +634,7 @@ static void ofono_getcards_reply(DBusPendingCall *pending, void *user_data)
 | 
			
		|||
	DBusMessage *r;
 | 
			
		||||
	DBusMessageIter i, array_i, struct_i, props_i;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
	r = steal_reply_and_unref(&pending);
 | 
			
		||||
	if (r == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -665,7 +666,6 @@ static void ofono_getcards_reply(DBusPendingCall *pending, void *user_data)
 | 
			
		|||
 | 
			
		||||
finish:
 | 
			
		||||
	dbus_message_unref(r);
 | 
			
		||||
	dbus_pending_call_unref(pending);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int backend_ofono_register(void *data)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -351,10 +351,8 @@ static void on_battery_provider_registered(DBusPendingCall *pending_call,
 | 
			
		|||
	DBusMessage *reply;
 | 
			
		||||
	struct spa_bt_device *device = data;
 | 
			
		||||
 | 
			
		||||
	reply = dbus_pending_call_steal_reply(pending_call);
 | 
			
		||||
	dbus_pending_call_unref(pending_call);
 | 
			
		||||
 | 
			
		||||
	device->battery_pending_call = NULL;
 | 
			
		||||
	spa_assert(device->battery_pending_call == pending_call);
 | 
			
		||||
	reply = steal_reply_and_unref(&device->battery_pending_call);
 | 
			
		||||
 | 
			
		||||
	if (dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_ERROR) {
 | 
			
		||||
		spa_log_error(device->monitor->log, "Failed to register battery provider. Error: %s", dbus_message_get_error_name(reply));
 | 
			
		||||
| 
						 | 
				
			
			@ -3228,11 +3226,8 @@ static void transport_set_property_volume_reply(DBusPendingCall *pending, void *
 | 
			
		|||
	DBusError err = DBUS_ERROR_INIT;
 | 
			
		||||
	DBusMessage *r;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
 | 
			
		||||
	spa_assert(transport->volume_call == pending);
 | 
			
		||||
	dbus_pending_call_unref(pending);
 | 
			
		||||
	transport->volume_call = NULL;
 | 
			
		||||
	r = steal_reply_and_unref(&transport->volume_call);
 | 
			
		||||
 | 
			
		||||
	if (dbus_set_error_from_message(&err, r)) {
 | 
			
		||||
		spa_log_info(monitor->log, "transport %p: set volume failed for transport %s: %s",
 | 
			
		||||
| 
						 | 
				
			
			@ -3382,11 +3377,8 @@ static void transport_acquire_reply(DBusPendingCall *pending, void *user_data)
 | 
			
		|||
	DBusMessage *r;
 | 
			
		||||
	struct spa_bt_transport *t, *t_linked;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
 | 
			
		||||
	spa_assert(transport->acquire_call == pending);
 | 
			
		||||
	dbus_pending_call_unref(pending);
 | 
			
		||||
	transport->acquire_call = NULL;
 | 
			
		||||
	r = steal_reply_and_unref(&transport->acquire_call);
 | 
			
		||||
 | 
			
		||||
	spa_bt_device_update_last_bluez_action_time(device);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3967,11 +3959,8 @@ static void media_codec_switch_reply(DBusPendingCall *pending, void *user_data)
 | 
			
		|||
	struct spa_bt_device *device = sw->device;
 | 
			
		||||
	DBusMessage *r;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
 | 
			
		||||
	spa_assert(sw->pending == pending);
 | 
			
		||||
	dbus_pending_call_unref(pending);
 | 
			
		||||
	sw->pending = NULL;
 | 
			
		||||
	r = steal_reply_and_unref(&sw->pending);
 | 
			
		||||
 | 
			
		||||
	spa_bt_device_update_last_bluez_action_time(device);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -4450,9 +4439,7 @@ static void bluez_register_endpoint_legacy_reply(DBusPendingCall *pending, void
 | 
			
		|||
	struct spa_bt_monitor *monitor = adapter->monitor;
 | 
			
		||||
	DBusMessage *r;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
	dbus_pending_call_unref(pending);
 | 
			
		||||
 | 
			
		||||
	r = steal_reply_and_unref(&pending);
 | 
			
		||||
	if (r == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -4751,9 +4738,7 @@ static void bluez_register_application_a2dp_reply(DBusPendingCall *pending, void
 | 
			
		|||
	DBusMessage *r;
 | 
			
		||||
	bool fallback = true;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
	dbus_pending_call_unref(pending);
 | 
			
		||||
 | 
			
		||||
	r = steal_reply_and_unref(&pending);
 | 
			
		||||
	if (r == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -4784,9 +4769,7 @@ static void bluez_register_application_bap_reply(DBusPendingCall *pending, void
 | 
			
		|||
	struct spa_bt_monitor *monitor = adapter->monitor;
 | 
			
		||||
	DBusMessage *r;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
	dbus_pending_call_unref(pending);
 | 
			
		||||
 | 
			
		||||
	r = steal_reply_and_unref(&pending);
 | 
			
		||||
	if (r == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -5200,12 +5183,8 @@ static void get_managed_objects_reply(DBusPendingCall *pending, void *user_data)
 | 
			
		|||
	DBusMessage *r;
 | 
			
		||||
	DBusMessageIter it[6];
 | 
			
		||||
 | 
			
		||||
	spa_assert(pending == monitor->get_managed_objects_call);
 | 
			
		||||
	monitor->get_managed_objects_call = NULL;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
	dbus_pending_call_unref(pending);
 | 
			
		||||
 | 
			
		||||
	spa_assert(monitor->get_managed_objects_call == pending);
 | 
			
		||||
	r = steal_reply_and_unref(&monitor->get_managed_objects_call);
 | 
			
		||||
	if (r == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,4 +19,14 @@ static inline void cancel_and_unref(DBusPendingCall **pp)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline DBusMessage *steal_reply_and_unref(DBusPendingCall **pp)
 | 
			
		||||
{
 | 
			
		||||
	DBusPendingCall *pending_call = spa_steal_ptr(*pp);
 | 
			
		||||
 | 
			
		||||
	DBusMessage *reply = dbus_pending_call_steal_reply(pending_call);
 | 
			
		||||
	dbus_pending_call_unref(pending_call);
 | 
			
		||||
 | 
			
		||||
	return reply;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* SPA_BLUEZ5_DBUS_HELPERS_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -125,10 +125,7 @@ static void mm_get_call_properties_reply(DBusPendingCall *pending, void *user_da
 | 
			
		|||
	MMCallState state;
 | 
			
		||||
 | 
			
		||||
	spa_assert(call->pending == pending);
 | 
			
		||||
	call->pending = NULL;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
	dbus_pending_call_unref(pending);
 | 
			
		||||
	r = steal_reply_and_unref(&call->pending);
 | 
			
		||||
	if (r == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -424,10 +421,7 @@ static void mm_get_managed_objects_reply(DBusPendingCall *pending, void *user_da
 | 
			
		|||
	DBusMessageIter i, array_i;
 | 
			
		||||
 | 
			
		||||
	spa_assert(this->pending == pending);
 | 
			
		||||
	this->pending = NULL;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
	dbus_pending_call_unref(pending);
 | 
			
		||||
	r = steal_reply_and_unref(&this->pending);
 | 
			
		||||
	if (r == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -782,10 +776,7 @@ static void mm_get_call_simple_reply(DBusPendingCall *pending, void *data)
 | 
			
		|||
	free(data);
 | 
			
		||||
 | 
			
		||||
	spa_assert(call->pending == pending);
 | 
			
		||||
	call->pending = NULL;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
	dbus_pending_call_unref(pending);
 | 
			
		||||
	r = steal_reply_and_unref(&call->pending);
 | 
			
		||||
	if (r == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -815,10 +806,7 @@ static void mm_get_call_create_reply(DBusPendingCall *pending, void *data)
 | 
			
		|||
	free(data);
 | 
			
		||||
 | 
			
		||||
	spa_assert(this->voice_pending == pending);
 | 
			
		||||
	this->voice_pending = NULL;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
	dbus_pending_call_unref(pending);
 | 
			
		||||
	r = steal_reply_and_unref(&this->voice_pending);
 | 
			
		||||
	if (r == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,8 +44,7 @@ static void upower_get_percentage_properties_reply(DBusPendingCall *pending, voi
 | 
			
		|||
	DBusMessage *r;
 | 
			
		||||
	DBusMessageIter i, variant_i;
 | 
			
		||||
 | 
			
		||||
	r = dbus_pending_call_steal_reply(pending);
 | 
			
		||||
	dbus_pending_call_unref(pending);
 | 
			
		||||
	r = steal_reply_and_unref(&pending);
 | 
			
		||||
	if (r == NULL)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue