tevent: add tevent_wakeup_send/recv()
authorStefan Metzmacher <metze@samba.org>
Tue, 17 Feb 2009 09:22:33 +0000 (10:22 +0100)
committerStefan Metzmacher <metze@samba.org>
Wed, 18 Feb 2009 09:31:36 +0000 (10:31 +0100)
This can be used as tevent_req based timer event.

metze

lib/tevent/libtevent.m4
lib/tevent/tevent.h
lib/tevent/tevent_wakeup.c [new file with mode: 0644]

index cbfb98169289d5eb435fc83562db277a3929f6cb..29a64ae3b3b822307666ed07dfaf35950171f7ab 100644 (file)
@@ -26,7 +26,8 @@ AC_SUBST(TEVENT_LIBS)
 
 TEVENT_CFLAGS="-I$teventdir"
 
-TEVENT_OBJ="tevent.o tevent_fd.o tevent_timed.o tevent_signal.o tevent_req.o tevent_debug.o tevent_util.o"
+TEVENT_OBJ="tevent.o tevent_fd.o tevent_timed.o tevent_signal.o tevent_debug.o tevent_util.o"
+TEVENT_OBJ="$TEVENT_OBJ tevent_req.o tevent_wakeup.o"
 TEVENT_OBJ="$TEVENT_OBJ tevent_standard.o tevent_select.o"
 
 AC_CHECK_HEADERS(sys/epoll.h)
index cf5e8e4930c8b1d1e2de645ad308f2410d3dcd70..16fac7327f05b73db3e587b69e924456457b16d3 100644 (file)
@@ -299,6 +299,10 @@ bool tevent_req_is_error(struct tevent_req *req,
                         enum tevent_req_state *state,
                         uint64_t *error);
 
+struct tevent_req *tevent_wakeup_send(TALLOC_CTX *mem_ctx,
+                                     struct tevent_context *ev,
+                                     struct timeval wakeup_time);
+bool tevent_wakeup_recv(struct tevent_req *req);
 
 int tevent_timeval_compare(const struct timeval *tv1,
                           const struct timeval *tv2);
diff --git a/lib/tevent/tevent_wakeup.c b/lib/tevent/tevent_wakeup.c
new file mode 100644 (file)
index 0000000..82c3942
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+   Unix SMB/CIFS implementation.
+   Infrastructure for async requests
+   Copyright (C) Volker Lendecke 2008
+   Copyright (C) Stefan Metzmacher 2009
+
+     ** NOTE! The following LGPL license applies to the tevent
+     ** library. This does NOT imply that all of Samba is released
+     ** under the LGPL
+
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 3 of the License, or (at your option) any later version.
+
+   This library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with this library; if not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "replace.h"
+#include "tevent.h"
+#include "tevent_internal.h"
+#include "tevent_util.h"
+
+struct tevent_wakeup_state {
+       struct timeval wakeup_time;
+};
+
+struct tevent_req *tevent_wakeup_send(TALLOC_CTX *mem_ctx,
+                                     struct tevent_context *ev,
+                                     struct timeval wakeup_time)
+{
+       struct tevent_req *req;
+       struct tevent_wakeup_state *state;
+
+       req = tevent_req_create(mem_ctx, &state,
+                               struct tevent_wakeup_state);
+       if (!req) {
+               return NULL;
+       }
+       state->wakeup_time = wakeup_time;
+
+       if (!tevent_req_set_endtime(req, ev, wakeup_time)) {
+               goto post;
+       }
+
+       return req;
+post:
+       return tevent_req_post(req, ev);
+}
+
+bool tevent_wakeup_recv(struct tevent_req *req)
+{
+       enum tevent_req_state state;
+       uint64_t error;
+
+       if (tevent_req_is_error(req, &state, &error)) {
+               if (state == TEVENT_REQ_TIMED_OUT) {
+                       return true;
+               }
+       }
+
+       return false;
+}
+