summaryrefslogtreecommitdiff
path: root/lib/tevent
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2009-03-17 10:18:34 +0100
committerKarolin Seeger <kseeger@samba.org>2009-04-15 09:07:14 +0200
commit761f98840956996a0d96b26ec60158dbe552632e (patch)
tree50ccb7fbb20a86ecc50f5305134d9e7a18e30b9f /lib/tevent
parent107059499d592b169f5e827623dc2d2fb9d3d7ee (diff)
downloadsamba-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/tevent')
-rw-r--r--lib/tevent/tevent_internal.h4
-rw-r--r--lib/tevent/tevent_req.c28
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;
}