2011-03-25 17:39:21

by Santiago Carot

[permalink] [raw]
Subject: [PATCH 1/2] Fix memory leak if an error occurs when a data channel is reconnected.

---
health/hdp.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/health/hdp.c b/health/hdp.c
index 3c2dce1..7a4b219 100644
--- a/health/hdp.c
+++ b/health/hdp.c
@@ -514,9 +514,9 @@ static void hdp_mdl_reconn_cb(struct mcap_mdl *mdl, GError *err, gpointer data)
reply = g_dbus_create_error(dc_data->msg,
ERROR_INTERFACE ".HealthError",
"Cannot get file descriptor");
-
- reply = g_dbus_create_reply(dc_data->msg, DBUS_TYPE_UNIX_FD, &fd,
- DBUS_TYPE_INVALID);
+ else
+ reply = g_dbus_create_reply(dc_data->msg, DBUS_TYPE_UNIX_FD,
+ &fd, DBUS_TYPE_INVALID);
g_dbus_send_message(dc_data->conn, reply);
}

--
1.7.4.1



2011-03-27 19:52:41

by Johan Hedberg

[permalink] [raw]
Subject: Re: [PATCH 1/2] Fix memory leak if an error occurs when a data channel is reconnected.

Hi,

On Fri, Mar 25, 2011, Santiago Carot-Nemesio wrote:
> ---
> health/hdp.c | 6 +++---
> 1 files changed, 3 insertions(+), 3 deletions(-)

Both patches are now upstream. Thanks.

Johan

2011-03-25 17:39:22

by Santiago Carot

[permalink] [raw]
Subject: [PATCH 2/2] Emit missing signal when data channel is reconnected.

Reconnections of data channels should be indicated to others
applications by using the appropriate signal.
---
health/hdp.c | 15 ++++++++++++---
1 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/health/hdp.c b/health/hdp.c
index 7a4b219..7fed483 100644
--- a/health/hdp.c
+++ b/health/hdp.c
@@ -510,14 +510,23 @@ static void hdp_mdl_reconn_cb(struct mcap_mdl *mdl, GError *err, gpointer data)
}

fd = mcap_mdl_get_fd(dc_data->hdp_chann->mdl);
- if (fd < 0)
+ if (fd < 0) {
reply = g_dbus_create_error(dc_data->msg,
ERROR_INTERFACE ".HealthError",
"Cannot get file descriptor");
- else
- reply = g_dbus_create_reply(dc_data->msg, DBUS_TYPE_UNIX_FD,
+ g_dbus_send_message(dc_data->conn, reply);
+ return;
+ }
+
+ reply = g_dbus_create_reply(dc_data->msg, DBUS_TYPE_UNIX_FD,
&fd, DBUS_TYPE_INVALID);
g_dbus_send_message(dc_data->conn, reply);
+
+ g_dbus_emit_signal(dc_data->conn,
+ device_get_path(dc_data->hdp_chann->dev->dev),
+ HEALTH_DEVICE, "ChannelConnected",
+ DBUS_TYPE_OBJECT_PATH, &dc_data->hdp_chann->path,
+ DBUS_TYPE_INVALID);
}

static void hdp_get_dcpsm_cb(uint16_t dcpsm, gpointer user_data, GError *err)
--
1.7.4.1