From: Mikel Astiz <mikel.astiz@xxxxxxxxxxxx> Previous implementation of session_terminate_transfer assumed that the transfer being terminated would always be the active one. However, it should be possible to cancel any queued transfer using the D-Bus api. --- client/session.c | 32 ++++++++++++++++++++++++-------- 1 files changed, 24 insertions(+), 8 deletions(-) diff --git a/client/session.c b/client/session.c index eaabcf9..50a6a5d 100644 --- a/client/session.c +++ b/client/session.c @@ -762,18 +762,34 @@ static void session_terminate_transfer(struct obc_session *session, { struct pending_request *p = session->p; - if (p == NULL || p->transfer != transfer) - return; - obc_session_ref(session); - if (p->func) - p->func(session, gerr, p->data); + if (p != NULL && p->transfer == transfer) { + if (p->func) + p->func(session, gerr, p->data); - pending_request_free(p); - session->p = NULL; + pending_request_free(p); + session->p = NULL; - session_process_queue(session); + session_process_queue(session); + } else { + GList *l; + + for (l = session->queue->head; l; l = l->next) { + p = l->data; + + if (p->transfer != transfer) + continue; + + g_queue_delete_link(session->queue, l); + + if (p->func) + p->func(session, gerr, p->data); + + pending_request_free(p); + break; + } + } obc_session_unref(session); } -- 1.7.6.5 -- 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