From 9d13a70842cf4c23d2e4c4f50a9a402748b99c94 Mon Sep 17 00:00:00 2001 From: Mikel Astiz Date: Tue, 12 Jun 2012 14:10:26 +0200 Subject: [PATCH] obexd: Fix cancellation of queued transfers Cancelling queued (not started yet) transfers should not fail. Instead, they must be removed from the queue, so we just need to call the transfer callback. --- obexd/client/transfer.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/obexd/client/transfer.c b/obexd/client/transfer.c index f296638c5..cb7c26c21 100644 --- a/obexd/client/transfer.c +++ b/obexd/client/transfer.c @@ -204,10 +204,20 @@ static DBusMessage *obc_transfer_cancel(DBusConnection *connection, ERROR_INTERFACE ".InProgress", "Cancellation already in progress"); - if (transfer->xfer == 0) - return g_dbus_create_error(message, - ERROR_INTERFACE ".Failed", - "Failed"); + if (transfer->xfer == 0) { + struct transfer_callback *callback = transfer->callback; + + if (callback != NULL) { + GError *err; + + err = g_error_new(OBC_TRANSFER_ERROR, -ECANCELED, "%s", + "Transfer cancelled by user"); + callback->func(transfer, err, callback->data); + g_error_free(err); + } + + return dbus_message_new_method_return(message); + } if (transfer->progress_id != 0) { g_source_remove(transfer->progress_id); -- 2.11.0