diff options
author | Stefan Metzmacher <metze@samba.org> | 2009-03-17 10:18:34 +0100 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2009-04-15 09:07:14 +0200 |
commit | 761f98840956996a0d96b26ec60158dbe552632e (patch) | |
tree | 50ccb7fbb20a86ecc50f5305134d9e7a18e30b9f /lib | |
parent | 107059499d592b169f5e827623dc2d2fb9d3d7ee (diff) | |
download | samba-761f98840956996a0d96b26ec60158dbe552632e.tar.gz |
tevent: use an immediate event fot tevent_req_post()
Now tevent_req_post() never fails
metze
(cherry picked from commit 4bdf299385220988a4fe16f82aab528283204c7f)
(cherry picked from commit d88a254c5d2fbdda642d469924411d4d6d5f8422)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/tevent/tevent_internal.h | 4 | ||||
-rw-r--r-- | lib/tevent/tevent_req.c | 28 |
2 files changed, 13 insertions, 19 deletions
diff --git a/lib/tevent/tevent_internal.h b/lib/tevent/tevent_internal.h index cf54242da1a..88bda244ac4 100644 --- a/lib/tevent/tevent_internal.h +++ b/lib/tevent/tevent_internal.h @@ -105,10 +105,10 @@ struct tevent_req { uint64_t error; /** - * @brief the timer event if tevent_req_post was used + * @brief the immediate event used by tevent_req_post * */ - struct tevent_timer *trigger; + struct tevent_immediate *trigger; /** * @brief the timer event if tevent_req_set_timeout was used diff --git a/lib/tevent/tevent_req.c b/lib/tevent/tevent_req.c index 3514f315142..444f7b330dc 100644 --- a/lib/tevent/tevent_req.c +++ b/lib/tevent/tevent_req.c @@ -97,6 +97,11 @@ struct tevent_req *_tevent_req_create(TALLOC_CTX *mem_ctx, req->internal.private_type = type; req->internal.location = location; req->internal.state = TEVENT_REQ_IN_PROGRESS; + req->internal.trigger = tevent_create_immediate(req); + if (!req->internal.trigger) { + talloc_free(req); + return NULL; + } data = talloc_size(req, data_size); if (data == NULL) { @@ -199,23 +204,18 @@ bool tevent_req_nomem(const void *p, struct tevent_req *req) } /** - * @brief Timed event callback + * @brief Immediate event callback * @param[in] ev Event context - * @param[in] te The timed event - * @param[in] now zero time + * @param[in] im The immediate event * @param[in] priv The async request to be finished */ static void tevent_req_trigger(struct tevent_context *ev, - struct tevent_timer *te, - struct timeval zero, + struct tevent_immediate *im, void *private_data) { struct tevent_req *req = talloc_get_type(private_data, struct tevent_req); - talloc_free(req->internal.trigger); - req->internal.trigger = NULL; - tevent_req_finish(req, req->internal.state); } @@ -223,8 +223,7 @@ static void tevent_req_trigger(struct tevent_context *ev, * @brief Finish a request before the caller had the change to set the callback * @param[in] req The finished request * @param[in] ev The tevent_context for the timed event - * @retval On success req will be returned, - * on failure req will be destroyed + * @retval req will be returned * * An implementation of an async request might find that it can either finish * the request without waiting for an external event, or it can't even start @@ -237,13 +236,8 @@ static void tevent_req_trigger(struct tevent_context *ev, struct tevent_req *tevent_req_post(struct tevent_req *req, struct tevent_context *ev) { - req->internal.trigger = tevent_add_timer(ev, req, tevent_timeval_zero(), - tevent_req_trigger, req); - if (!req->internal.trigger) { - talloc_free(req); - return NULL; - } - + tevent_schedule_immediate(req->internal.trigger, + ev, tevent_req_trigger, req); return req; } |