From 35938b779dc8d2498e66e6a6483a36c1f99c2e19 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Mon, 7 Apr 2014 13:56:51 +0300 Subject: [PATCH] gobex: Fix being able to cancel completed requests This fixes bogus responses when rsp_func calls g_obex_cancel_req for responses with final bit set. --- gobex/gobex.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gobex/gobex.c b/gobex/gobex.c index 7f859383a..850e288af 100644 --- a/gobex/gobex.c +++ b/gobex/gobex.c @@ -1098,6 +1098,10 @@ static void handle_response(GObex *obex, GError *err, GObexPacket *rsp) p = obex->pending_req; + /* Reset if final so it can no longer be cancelled */ + if (final_rsp) + obex->pending_req = NULL; + if (p->cancelled) err = g_error_new(G_OBEX_ERROR, G_OBEX_ERROR_CANCELLED, "The operation was cancelled"); @@ -1116,10 +1120,8 @@ static void handle_response(GObex *obex, GError *err, GObexPacket *rsp) if (p->cancelled) g_error_free(err); - if (final_rsp) { + if (final_rsp) pending_pkt_free(p); - obex->pending_req = NULL; - } if (!disconn && g_queue_get_length(obex->tx_queue) > 0) enable_tx(obex); -- 2.47.3