projects
/
project
/
ubus.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add request cancelled flag
[project/ubus.git]
/
libubus.c
diff --git
a/libubus.c
b/libubus.c
index
7bf67a7
..
b889e5a
100644
(file)
--- a/
libubus.c
+++ b/
libubus.c
@@
-178,7
+178,8
@@
static void ubus_process_req_data(struct ubus_request *req)
data = list_first_entry(&req->pending,
struct ubus_pending_data, list);
list_del(&data->list);
data = list_first_entry(&req->pending,
struct ubus_pending_data, list);
list_del(&data->list);
- req->data_cb(req, data->type, data->data);
+ if (!req->cancelled)
+ req->data_cb(req, data->type, data->data);
free(data);
}
}
free(data);
}
}
@@
-300,6
+301,8
@@
void ubus_abort_request(struct ubus_context *ctx, struct ubus_request *req)
if (!list_empty(&req->list))
return;
if (!list_empty(&req->list))
return;
+ req->cancelled = true;
+ ubus_process_req_data(req);
list_del(&req->list);
}
list_del(&req->list);
}
@@
-331,6
+334,9
@@
int ubus_complete_request(struct ubus_context *ctx, struct ubus_request *req)
if (req->status_msg)
return req->status_code;
if (req->status_msg)
return req->status_code;
+ if (req->cancelled)
+ return UBUS_STATUS_NO_DATA;
+
if (!get_next_msg(ctx, true))
return UBUS_STATUS_NO_DATA;
if (!get_next_msg(ctx, true))
return UBUS_STATUS_NO_DATA;