On 26.04.2017 14:19, Luiz Augusto von Dentz wrote: > From: Luiz Augusto von Dentz <luiz.von.dentz at intel.com> > > This detects if profile has already been called and we are waiting > the response. > --- > src/modules/bluetooth/backend-ofono.c | 19 ++++++++++++++++--- > 1 file changed, 16 insertions(+), 3 deletions(-) > > diff --git a/src/modules/bluetooth/backend-ofono.c b/src/modules/bluetooth/backend-ofono.c > index 3fbf153..a847ad0 100644 > --- a/src/modules/bluetooth/backend-ofono.c > +++ b/src/modules/bluetooth/backend-ofono.c > @@ -65,6 +65,7 @@ struct hf_audio_card { > char *remote_address; > char *local_address; > > + bool connecting; > int fd; > uint8_t codec; > > @@ -156,12 +157,22 @@ static int hf_audio_agent_transport_acquire(pa_bluetooth_transport *t, bool opti > pa_assert(card); > > if (!optional && card->fd < 0) { > - DBusMessage *m; > + DBusMessage *m, *r; > + DBusError derr; > > + if (card->connecting) > + return -1; > + > + card->connecting = true; > + > + dbus_error_init(&derr); > pa_assert_se(m = dbus_message_new_method_call(t->owner, t->path, "org.ofono.HandsfreeAudioCard", "Connect")); > - pa_assert_se(dbus_connection_send(pa_dbus_connection_get(card->backend->connection), m, NULL)); > + r = dbus_connection_send_with_reply_and_block(pa_dbus_connection_get(card->backend->connection), m, -1, &derr); > + if (!r) > + return -1; > > - return -1; > + if (card->connecting) > + return -1; > } > > /* The correct block size should take into account the SCO MTU from > @@ -535,6 +546,8 @@ static DBusMessage *hf_audio_agent_new_connection(DBusConnection *c, DBusMessage > > card = pa_hashmap_get(backend->cards, path); > > + card->connecting = false; Should card->connecting not be set to false immediately after entering hf_audio_agent_new_connection()? If you set it here, the card will never be able to connect again if the sender was wrong or dbus_message_get_args() fails. Or do you expect there will be another call to hf_audio_agent_new_connection() in these cases? > + > if (!card || codec != HFP_AUDIO_CODEC_CVSD || card->transport->state == PA_BLUETOOTH_TRANSPORT_STATE_PLAYING) { > pa_log_warn("New audio connection invalid arguments (path=%s fd=%d, codec=%d)", path, fd, codec); > pa_assert_se(r = dbus_message_new_error(m, "org.ofono.Error.InvalidArguments", "Invalid arguments in method call"));