mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-12-17 08:56:42 -05:00
bluetooth: Fix premature acquire attempts
A transport should be considered connected only after the connection procedure is complete, as expressed in audio_state_to_transport_state(). module-bluetooth-device should be loaded only after at least one transport is not only created (during configuration), but also connected. This fixes the issue of premature acquire attempts sometimes experienced when a headset is connected (issue not present in v3.0 though).
This commit is contained in:
parent
2c666e3e16
commit
5d4b7c4a89
2 changed files with 5 additions and 4 deletions
|
|
@ -1101,7 +1101,7 @@ bool pa_bluetooth_device_any_audio_connected(const pa_bluetooth_device *d) {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
for (i = 0; i < PA_BLUETOOTH_PROFILE_COUNT; i++)
|
for (i = 0; i < PA_BLUETOOTH_PROFILE_COUNT; i++)
|
||||||
if (d->transports[i])
|
if (d->transports[i] && d->transports[i]->state != PA_BLUETOOTH_TRANSPORT_STATE_DISCONNECTED)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -1888,7 +1888,7 @@ static int setup_transport(struct userdata *u) {
|
||||||
|
|
||||||
/* check if profile has a transport */
|
/* check if profile has a transport */
|
||||||
t = u->device->transports[u->profile];
|
t = u->device->transports[u->profile];
|
||||||
if (t == NULL) {
|
if (!t || t->state == PA_BLUETOOTH_TRANSPORT_STATE_DISCONNECTED) {
|
||||||
pa_log_warn("Profile has no transport");
|
pa_log_warn("Profile has no transport");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
@ -2085,7 +2085,7 @@ static int card_set_profile(pa_card *c, pa_card_profile *new_profile) {
|
||||||
if (*d != PROFILE_OFF) {
|
if (*d != PROFILE_OFF) {
|
||||||
const pa_bluetooth_device *device = u->device;
|
const pa_bluetooth_device *device = u->device;
|
||||||
|
|
||||||
if (!device->transports[*d]) {
|
if (!device->transports[*d] || device->transports[*d]->state == PA_BLUETOOTH_TRANSPORT_STATE_DISCONNECTED) {
|
||||||
pa_log_warn("Profile not connected, refused to switch profile to %s", new_profile->name);
|
pa_log_warn("Profile not connected, refused to switch profile to %s", new_profile->name);
|
||||||
return -PA_ERR_IO;
|
return -PA_ERR_IO;
|
||||||
}
|
}
|
||||||
|
|
@ -2348,7 +2348,8 @@ static int add_card(struct userdata *u) {
|
||||||
|
|
||||||
d = PA_CARD_PROFILE_DATA(u->card->active_profile);
|
d = PA_CARD_PROFILE_DATA(u->card->active_profile);
|
||||||
|
|
||||||
if (*d != PROFILE_OFF && !device->transports[*d]) {
|
if (*d != PROFILE_OFF && (!device->transports[*d] ||
|
||||||
|
device->transports[*d]->state == PA_BLUETOOTH_TRANSPORT_STATE_DISCONNECTED)) {
|
||||||
pa_log_warn("Default profile not connected, selecting off profile");
|
pa_log_warn("Default profile not connected, selecting off profile");
|
||||||
u->card->active_profile = pa_hashmap_get(u->card->profiles, "off");
|
u->card->active_profile = pa_hashmap_get(u->card->profiles, "off");
|
||||||
u->card->save_profile = false;
|
u->card->save_profile = false;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue