diff --git a/obexd/client/session.c b/obexd/client/session.c
index 30b8431..417295e 100644
--- a/obexd/client/session.c
+++ b/obexd/client/session.c
obc_session_unref(session);
}
+static gint pending_transfer_cmptransfer(gconstpointer a, gconstpointer b)
+{
+ const struct pending_request *p = a;
+ const struct obc_transfer *transfer = b;
+
+ if (p->transfer == transfer)
+ return 0;
+
+ return -1;
+}
+
static void session_terminate_transfer(struct obc_session *session,
struct obc_transfer *transfer,
GError *gerr)
{
struct pending_request *p = session->p;
- if (p == NULL || p->transfer != transfer)
- return;
+ if (p == NULL || p->transfer != transfer) {
+ GList *match;
+
+ match = g_list_find_custom(session->queue->head, transfer,
+ pending_transfer_cmptransfer);
+ if (match == NULL)
+ return;
+
+ p = match->data;
+ g_queue_delete_link(session->queue, match);
+ }
obc_session_ref(session);
p->func(session, gerr, p->data);
pending_request_free(p);
- session->p = NULL;
- session_process_queue(session);
+ if (p == session->p) {
+ session->p = NULL;
+ session_process_queue(session);
+ }
obc_session_unref(session);
}