summaryrefslogtreecommitdiff
path: root/client/session.c
diff options
context:
space:
mode:
authorMikel Astiz <mikel.astiz@bmw-carit.de>2012-02-28 13:56:21 +0100
committerJohan Hedberg <johan.hedberg@intel.com>2012-02-29 13:53:23 -0600
commit1125f7a6d26211d766a5574b490f39b6f185cf59 (patch)
treef18f2909465378fe35271f05ca8b09add3956d5f /client/session.c
parent2cd65877ad0ea2d7c399a3c39a3160702cf16f45 (diff)
downloadobexd-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.c15
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)