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
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
size);
if (os->aborted)
- return -EPERM;
+ return os->err < 0 ? os->err : -EPERM;
return driver_read(os, buf, size);
}
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;
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);