diff options
Diffstat (limited to 'source3/lib')
-rw-r--r-- | source3/lib/async_req.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/source3/lib/async_req.c b/source3/lib/async_req.c index 01154ca436..2e85d9a38d 100644 --- a/source3/lib/async_req.c +++ b/source3/lib/async_req.c @@ -58,6 +58,36 @@ void async_req_error(struct async_req *req, NTSTATUS status) } } +static void async_trigger(struct event_context *ev, struct timed_event *te, + const struct timeval *now, void *priv) +{ + struct async_req *req = talloc_get_type_abort(priv, struct async_req); + + TALLOC_FREE(te); + if (NT_STATUS_IS_OK(req->status)) { + async_req_done(req); + } + else { + async_req_error(req, req->status); + } +} + +bool async_post_status(struct async_req *req, NTSTATUS status) +{ + /* + * Used if a request is finished before it even started + */ + + req->status = status; + + if (event_add_timed(req->event_ctx, req, timeval_zero(), + "async_trigger", + async_trigger, req) == NULL) { + return false; + } + return true; +} + bool async_req_nomem(const void *p, struct async_req *req) { if (p != NULL) { |