diff options
author | Mikel Astiz <mikel.astiz@bmw-carit.de> | 2012-02-28 13:56:21 +0100 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2012-02-29 13:53:23 -0600 |
commit | 1125f7a6d26211d766a5574b490f39b6f185cf59 (patch) | |
tree | f18f2909465378fe35271f05ca8b09add3956d5f /client/session.c | |
parent | 2cd65877ad0ea2d7c399a3c39a3160702cf16f45 (diff) | |
download | obexd-1125f7a6d26211d766a5574b490f39b6f185cf59.tar.gz |
client: fix unreported canceled transfers
A session can be shut down from D-Bus, and therefore the pending
transfer callbacks must be reported.
Diffstat (limited to 'client/session.c')
-rw-r--r-- | client/session.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/client/session.c b/client/session.c index 417295e..c4645fb 100644 --- a/client/session.c +++ b/client/session.c @@ -485,12 +485,25 @@ proceed: void obc_session_shutdown(struct obc_session *session) { + struct pending_request *p; + GError *err; + DBG("%p", session); obc_session_ref(session); /* Unregister any pending transfer */ - g_queue_foreach(session->queue, (GFunc) pending_request_free, NULL); + err = g_error_new(OBEX_IO_ERROR, OBEX_IO_DISCONNECTED, + "Session closed by user"); + + while ((p = g_queue_pop_head(session->queue))) { + if (p->func) + p->func(session, err, p->data); + + pending_request_free(p); + } + + g_error_free(err); /* Unregister interfaces */ if (session->path) |