diff options
Diffstat (limited to 'serial')
-rw-r--r-- | serial/port.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/serial/port.c b/serial/port.c index 5bd217b7..1ff26714 100644 --- a/serial/port.c +++ b/serial/port.c @@ -112,6 +112,8 @@ static void rfcomm_node_free(struct rfcomm_node *node) dbus_connection_unref(node->conn); if (node->owner) g_free(node->owner); + if (node->id) + rfcomm_release(node->id); if (node->io) { g_source_remove(node->io_id); g_io_channel_unref(node->io); @@ -121,19 +123,16 @@ static void rfcomm_node_free(struct rfcomm_node *node) static void connection_owner_exited(const char *name, struct rfcomm_node *node) { - char path[MAX_PATH_LENGTH]; - debug("Connect requestor %s exited. Releasing %s node", name, node->name); - snprintf(path, MAX_PATH_LENGTH, "%s/rfcomm%d", SERIAL_MANAGER_PATH, node->id); - rfcomm_release(node->id); dbus_connection_emit_signal(node->conn, SERIAL_MANAGER_PATH, SERIAL_MANAGER_INTERFACE, "ServiceDisconnected" , DBUS_TYPE_STRING, &node->name, DBUS_TYPE_INVALID); connected_nodes = g_slist_remove(connected_nodes, node); + rfcomm_node_free(node); } static gboolean rfcomm_disconnect_cb(GIOChannel *io, @@ -183,10 +182,9 @@ int port_add_listener(DBusConnection *conn, int id, int fd, connected_nodes = g_slist_append(connected_nodes, node); - /* Serial port connection listener */ + /* Service connection listener */ return name_listener_add(conn, owner, (name_cb_t) connection_owner_exited, node); - } int port_register(DBusConnection *conn, int id, const char *name, char *ppath) @@ -233,6 +231,7 @@ const char *port_get_owner(DBusConnection *conn, int16_t id) snprintf(path, MAX_PATH_LENGTH, "%s/rfcomm%d", SERIAL_MANAGER_PATH, id); + /* FIXME: Ports related to services connection doesn't have a path/object */ if (!dbus_connection_get_object_user_data(conn, path, (void *) &node) || !node) { errno = ENOENT; |