Diff between 2e1ab9b75dd62a1d82f42200e0c04846ec923b84 and f576cae0fb07aa3246a89be9c5953d53ee59ec8a

Changed Files

File Additions Deletions Status
obexd/src/obex-priv.h +1 -0 modified
obexd/src/obex.c +6 -4 modified

Full Patch

diff --git a/obexd/src/obex-priv.h b/obexd/src/obex-priv.h
index 5b72942..41854bc 100644
--- a/obexd/src/obex-priv.h
+++ b/obexd/src/obex-priv.h
@@ -43,6 +43,7 @@ struct obex_session {
 	int64_t size;
 	void *object;
 	gboolean aborted;
+	int err;
 	struct obex_service_driver *service;
 	void *service_data;
 	struct obex_server *server;
diff --git a/obexd/src/obex.c b/obexd/src/obex.c
index 05cc068..a028156 100644
--- a/obexd/src/obex.c
+++ b/obexd/src/obex.c
@@ -554,7 +554,7 @@ static gssize send_data(void *buf, gsize size, gpointer user_data)
 									size);
 
 	if (os->aborted)
-		return -EPERM;
+		return os->err < 0 ? os->err : -EPERM;
 
 	return driver_read(os, buf, size);
 }
@@ -594,7 +594,7 @@ static int driver_get_headers(struct obex_session *os)
 	DBG("name=%s type=%s object=%p", os->name, os->type, os->object);
 
 	if (os->aborted)
-		return -EPERM;
+		return os->err < 0 ? os->err : -EPERM;
 
 	if (os->object == NULL)
 		return -EIO;
@@ -661,8 +661,10 @@ static gboolean handle_async_io(void *object, int flags, int err,
 		return TRUE;
 
 done:
-	if (err < 0)
-		os_set_response(os, err);
+	if (err < 0) {
+		os->err = err;
+		os->aborted = TRUE;
+	}
 
 	g_obex_resume(os->obex);