summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2009-01-03 19:10:57 +0100
committerVolker Lendecke <vl@samba.org>2009-01-04 16:42:40 +0100
commitebacce2efe6dbb27a9e7962597da8ef783473f6a (patch)
tree3bc4cea4f00e43097dfd3cf0f2dc29bd48ed4799 /source3
parente058e51d63d4a476a1b49941cd8a8611d9164eba (diff)
downloadsamba-ebacce2efe6dbb27a9e7962597da8ef783473f6a.tar.gz
samba-ebacce2efe6dbb27a9e7962597da8ef783473f6a.tar.bz2
samba-ebacce2efe6dbb27a9e7962597da8ef783473f6a.zip
Add async timeout helpers
Diffstat (limited to 'source3')
-rw-r--r--source3/include/async_req.h10
-rw-r--r--source3/lib/async_req.c42
2 files changed, 52 insertions, 0 deletions
diff --git a/source3/include/async_req.h b/source3/include/async_req.h
index 2633027e37..bbe52da723 100644
--- a/source3/include/async_req.h
+++ b/source3/include/async_req.h
@@ -132,4 +132,14 @@ bool async_req_is_error(struct async_req *req, NTSTATUS *status);
NTSTATUS async_req_simple_recv(struct async_req *req);
+bool async_req_set_timeout(struct async_req *req, struct event_context *ev,
+ struct timeval to);
+
+struct async_req *async_wait_send(TALLOC_CTX *mem_ctx,
+ struct event_context *ev,
+ struct timeval to);
+
+NTSTATUS async_wait_recv(struct async_req *req);
+
+
#endif
diff --git a/source3/lib/async_req.c b/source3/lib/async_req.c
index 8c9b2e6b47..0653ff62a7 100644
--- a/source3/lib/async_req.c
+++ b/source3/lib/async_req.c
@@ -194,3 +194,45 @@ NTSTATUS async_req_simple_recv(struct async_req *req)
}
return NT_STATUS_OK;
}
+
+static void async_req_timedout(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);
+ async_req_error(req, NT_STATUS_IO_TIMEOUT);
+}
+
+bool async_req_set_timeout(struct async_req *req, struct event_context *ev,
+ struct timeval to)
+{
+ return (event_add_timed(ev, req,
+ timeval_current_ofs(to.tv_sec, to.tv_usec),
+ "async_req_timedout", async_req_timedout, req)
+ != NULL);
+}
+
+struct async_req *async_wait_send(TALLOC_CTX *mem_ctx,
+ struct event_context *ev,
+ struct timeval to)
+{
+ struct async_req *result;
+
+ result = async_req_new(mem_ctx);
+ if (result == NULL) {
+ return result;
+ }
+ if (!async_req_set_timeout(result, ev, to)) {
+ TALLOC_FREE(result);
+ return NULL;
+ }
+ return result;
+}
+
+NTSTATUS async_wait_recv(struct async_req *req)
+{
+ return NT_STATUS_OK;
+}