summaryrefslogtreecommitdiffstats
path: root/ctdb/lib/tevent/tevent_req.c
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronniesahlberg@gmail.com>2012-04-26 08:09:23 +1000
committerRonnie Sahlberg <ronniesahlberg@gmail.com>2012-04-26 08:09:23 +1000
commitdb411aaada39593c80f92e46be31d3473bf4639f (patch)
treef68222404db2155cc6d8d3f861ac486cb8a509ae /ctdb/lib/tevent/tevent_req.c
parent58e10b280d4a94a812bad07bbca049cddb2c1174 (diff)
parent195cf3c87e3c6c9f1784aa483110a64bc8760703 (diff)
downloadsamba-db411aaada39593c80f92e46be31d3473bf4639f.tar.gz
samba-db411aaada39593c80f92e46be31d3473bf4639f.tar.xz
samba-db411aaada39593c80f92e46be31d3473bf4639f.zip
Merge remote branch 'amitay/tevent-sync'
(This used to be ctdb commit 17ff3f240b0d72c72ed28d70fb9aeb3b20c80670)
Diffstat (limited to 'ctdb/lib/tevent/tevent_req.c')
-rw-r--r--ctdb/lib/tevent/tevent_req.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/ctdb/lib/tevent/tevent_req.c b/ctdb/lib/tevent/tevent_req.c
index b0c9c57dde..d8d0c5f564 100644
--- a/ctdb/lib/tevent/tevent_req.c
+++ b/ctdb/lib/tevent/tevent_req.c
@@ -74,6 +74,7 @@ struct tevent_req *_tevent_req_create(TALLOC_CTX *mem_ctx,
talloc_free(req);
return NULL;
}
+ req->internal.defer_callback_ev = NULL;
data = talloc_zero_size(req, data_size);
if (data == NULL) {
@@ -91,6 +92,11 @@ struct tevent_req *_tevent_req_create(TALLOC_CTX *mem_ctx,
void _tevent_req_notify_callback(struct tevent_req *req, const char *location)
{
req->internal.finish_location = location;
+ if (req->internal.defer_callback_ev) {
+ (void)tevent_req_post(req, req->internal.defer_callback_ev);
+ req->internal.defer_callback_ev = NULL;
+ return;
+ }
if (req->async.fn != NULL) {
req->async.fn(req);
}
@@ -123,6 +129,11 @@ bool _tevent_req_error(struct tevent_req *req,
return true;
}
+void _tevent_req_oom(struct tevent_req *req, const char *location)
+{
+ tevent_req_finish(req, TEVENT_REQ_NO_MEMORY, location);
+}
+
bool _tevent_req_nomem(const void *p,
struct tevent_req *req,
const char *location)
@@ -130,7 +141,7 @@ bool _tevent_req_nomem(const void *p,
if (p != NULL) {
return false;
}
- tevent_req_finish(req, TEVENT_REQ_NO_MEMORY, location);
+ _tevent_req_oom(req, location);
return true;
}
@@ -164,6 +175,12 @@ struct tevent_req *tevent_req_post(struct tevent_req *req,
return req;
}
+void tevent_req_defer_callback(struct tevent_req *req,
+ struct tevent_context *ev)
+{
+ req->internal.defer_callback_ev = ev;
+}
+
bool tevent_req_is_in_progress(struct tevent_req *req)
{
if (req->internal.state == TEVENT_REQ_IN_PROGRESS) {