Release of adapter session is added to obex-client upon closing OBEX transfer. --- client/session.c | 38 +++++++++++++++++++++++++++++++++++++- 1 files changed, 37 insertions(+), 1 deletions(-) diff --git a/client/session.c b/client/session.c index 75cd32e..423eb8c 100644 --- a/client/session.c +++ b/client/session.c @@ -302,9 +302,34 @@ static struct pending_req *send_method_call(DBusConnection *connection, return req; } +static void adapter_release_reply(DBusPendingCall *call, void *user_data) +{ + DBusError err; + DBusMessage *reply; + struct session_data *session = user_data; + struct pending_req *req = find_session_request(session, call); + + reply = dbus_pending_call_steal_reply(call); + + dbus_error_init(&err); + if (dbus_set_error_from_message(&err, reply)) { + error("manager replied with an error: %s, %s", + err.name, err.message); + dbus_error_free(&err); + } + + dbus_message_unref(reply); + + session->pending_calls = g_slist_remove(session->pending_calls, req); + pending_req_finalize(req); + + session_free(session); +} + void session_unref(struct session_data *session) { gboolean ret; + struct pending_req *req; ret = g_atomic_int_dec_and_test(&session->refcount); @@ -313,7 +338,18 @@ void session_unref(struct session_data *session) if (ret == FALSE) return; - session_free(session); + req = send_method_call(session->conn_system, + BT_BUS_NAME, session->adapter, + BT_ADAPTER_IFACE, "ReleaseSession", + adapter_release_reply, session, + DBUS_TYPE_INVALID); + if (!req) { + g_free(session->adapter); + session_free(session); + return; + } + + session->pending_calls = g_slist_prepend(session->pending_calls, req); } static void rfcomm_callback(GIOChannel *io, GError *err, gpointer user_data) -- 1.7.4.1 -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html