On 29.04.2017 13:28, Georg Chini wrote:
On 26.04.2017 14:19, Luiz Augusto von Dentz wrote:
From: Luiz Augusto von Dentz <[email protected]>

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.
Sorry, I did not see that the card is not known before that point, so that
you can't set the flag before.
But nevertheless the question remains what to do if one of the
two errors occurs. Maybe you could do the dbus_message_get_args()
first to identify the card. I don't know enough about the DBUS API,
if only one argument is wrong in dbus_message_get_args(), will the other
values be set anyway? If yes you could even try after a failure
if the path is set.

_______________________________________________
pulseaudio-discuss mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to