summaryrefslogtreecommitdiff
path: root/lib/tevent/tevent_req.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2011-07-08 15:54:51 +0200
committerStefan Metzmacher <metze@samba.org>2011-07-09 11:02:42 +0200
commite5827a4007c553ddf7b0078538b17122c83b0087 (patch)
tree25d90fa9c61e6bfb98fa8202c66a28f985368c3c /lib/tevent/tevent_req.c
parent2a1ebeae1976f4ecb8060deb829a62fe12b1fa39 (diff)
downloadsamba-e5827a4007c553ddf7b0078538b17122c83b0087.tar.gz
samba-e5827a4007c553ddf7b0078538b17122c83b0087.tar.bz2
samba-e5827a4007c553ddf7b0078538b17122c83b0087.zip
tevent: add tevent_req_defer_callback()
metze
Diffstat (limited to 'lib/tevent/tevent_req.c')
-rw-r--r--lib/tevent/tevent_req.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/tevent/tevent_req.c b/lib/tevent/tevent_req.c
index 92697b7df9..d8d0c5f564 100644
--- a/lib/tevent/tevent_req.c
+++ b/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);
}
@@ -169,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) {