Thread (17 messages) flat view 17 messages, 2 authors, 2011-08-29

Re: [PATCH v3 6/8] Use int instead of GError into callbacks

From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
Date: 2011-08-29 08:37:56

Hi Frédéric,

2011/8/26 Frédéric Dalleau [off-list ref]:
---
 audio/gateway.c   |   20 ++++++++++----------
 audio/gateway.h   |    4 ++--
 audio/transport.c |    4 ++--
 audio/unix.c      |    8 ++++----
 4 files changed, 18 insertions(+), 18 deletions(-)
Some description would be nice here, why do you need such change, is
there something you have changed in another patch that affects the
error handling? In that case I would suggest fixing in place, so we
can relate the changes using e.g. git blame.
quoted hunk ↗ jump to hunk
diff --git a/audio/gateway.c b/audio/gateway.c
index 353473b..93ff4b9 100644
--- a/audio/gateway.c
+++ b/audio/gateway.c
@@ -208,7 +208,7 @@ static unsigned int connect_cb_new(struct gateway *gw,
       return cb->id;
 }

-static void run_connect_cb(struct audio_device *dev, GError *err)
+static void run_connect_cb(struct audio_device *dev, int err)
 {
       struct gateway *gw = dev->gateway;
       GSList *l;
@@ -248,11 +248,6 @@ static void sco_connect_cb(GIOChannel *chan, GError *err, gpointer user_data)
       gw->sco = g_io_channel_ref(chan);

-       if (gw->sco_start_cb)
-               gw->sco_start_cb(dev, err, gw->sco_start_cb_data);
-
-       run_connect_cb(dev, err);
-
       if (err) {
               error("sco_connect_cb(): %s", err->message);
               gateway_close(dev);
@@ -263,6 +258,11 @@ static void sco_connect_cb(GIOChannel *chan, GError *err, gpointer user_data)
                               (GIOFunc) sco_io_cb, dev);

       change_state(dev, GATEWAY_STATE_PLAYING);
+
+       if (gw->sco_start_cb)
+               gw->sco_start_cb(dev, 0, gw->sco_start_cb_data);
+
+       run_connect_cb(dev, 0);
 }

 static gboolean rfcomm_disconnect_cb(GIOChannel *chan, GIOCondition cond,
@@ -317,7 +317,7 @@ static void rfcomm_connect_cb(GIOChannel *chan, GError *err,
       if (err) {
               error("connect(): %s", err->message);
               if (gw->sco_start_cb)
-                       gw->sco_start_cb(dev, err, gw->sco_start_cb_data);
+                       gw->sco_start_cb(dev, err->code, gw->sco_start_cb_data);
               goto fail;
       }
@@ -519,7 +519,7 @@ fail:
                               "connect: %s (%d)", strerror(-err), -err);

       if (gw->sco_start_cb)
-               gw->sco_start_cb(dev, gerr, gw->sco_start_cb_data);
+               gw->sco_start_cb(dev, -err, gw->sco_start_cb_data);

       g_error_free(gerr);
 }
@@ -806,7 +806,7 @@ void gateway_start_service(struct audio_device *dev)
 static gboolean request_stream_cb(gpointer data)
 {
-       run_connect_cb(data, NULL);
+       run_connect_cb(data, 0);
       return FALSE;
 }
@@ -853,7 +853,7 @@ int gateway_config_stream(struct audio_device *dev, gateway_stream_cb_t sco_cb,
       }

       if (sco_cb)
-               sco_cb(dev, NULL, user_data);
+               sco_cb(dev, 0, user_data);

       return 0;
 }
diff --git a/audio/gateway.h b/audio/gateway.h
index 7012fc5..20f90bd 100644
--- a/audio/gateway.h
+++ b/audio/gateway.h
@@ -42,8 +42,8 @@ typedef void (*gateway_state_cb) (struct audio_device *dev,
                                       gateway_state_t old_state,
                                       gateway_state_t new_state,
                                       void *user_data);
-typedef void (*gateway_stream_cb_t) (struct audio_device *dev, GError *err,
-               void *user_data);
+typedef void (*gateway_stream_cb_t) (struct audio_device *dev, int err,
+                                       void *user_data);

 void gateway_set_state(struct audio_device *dev, gateway_state_t new_state);
 void gateway_unregister(struct audio_device *dev);
diff --git a/audio/transport.c b/audio/transport.c
index 2739199..54dabb6 100644
--- a/audio/transport.c
+++ b/audio/transport.c
@@ -437,7 +437,7 @@ static void cancel_headset(struct media_transport *transport, guint id)
       headset_cancel_stream(transport->device, id);
 }

-static void gateway_resume_complete(struct audio_device *dev, GError *err,
+static void gateway_resume_complete(struct audio_device *dev, int err,
                                                       void *user_data)
 {
       struct media_owner *owner = user_data;
@@ -453,7 +453,7 @@ static void gateway_resume_complete(struct audio_device *dev, GError *err,
               goto fail;

       if (err) {
-               error("Failed to resume gateway: error %s", err->message);
+               error("Failed to resume gateway: error %s", strerror(-err));
               goto fail;
       }
diff --git a/audio/unix.c b/audio/unix.c
index 678d097..111fc57 100644
--- a/audio/unix.c
+++ b/audio/unix.c
@@ -339,14 +339,14 @@ failed:
       unix_ipc_error(client, BT_SET_CONFIGURATION, EIO);
 }

-static void gateway_setup_complete(struct audio_device *dev, GError *err, void *user_data)
+static void gateway_setup_complete(struct audio_device *dev, int err, void *user_data)
 {
       struct unix_client *client = user_data;
       char buf[BT_SUGGESTED_BUFFER_SIZE];
       struct bt_set_configuration_rsp *rsp = (void *) buf;

       if (err) {
-               unix_ipc_error(client, BT_SET_CONFIGURATION, err->code);
+               unix_ipc_error(client, BT_SET_CONFIGURATION, -err);
               return;
       }
@@ -409,7 +409,7 @@ failed:
       unix_ipc_error(client, BT_START_STREAM, EIO);
 }

-static void gateway_resume_complete(struct audio_device *dev, GError *err, void *user_data)
+static void gateway_resume_complete(struct audio_device *dev, int err, void *user_data)
 {
       struct unix_client *client = user_data;
       char buf[BT_SUGGESTED_BUFFER_SIZE];
@@ -417,7 +417,7 @@ static void gateway_resume_complete(struct audio_device *dev, GError *err, void
       struct bt_new_stream_ind *ind = (void *) buf;

       if (err) {
-               unix_ipc_error(client, BT_START_STREAM, err->code);
+               unix_ipc_error(client, BT_START_STREAM, -err);
               return;
       }

--
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


-- 
Luiz Augusto von Dentz
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help