diff options
author | Volker Lendecke <vl@samba.org> | 2012-07-18 11:25:42 +0200 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2012-07-18 15:54:20 -0700 |
commit | 3da86cc23f20e5b852d08aa05dacabb2d6e496e2 (patch) | |
tree | ecf2a9bc116cd623292bf7177aab55d182743a43 /source3/lib | |
parent | f79fb4429c7fb9c2ae81f06fc8f2162a1ccd226c (diff) | |
download | samba-3da86cc23f20e5b852d08aa05dacabb2d6e496e2.tar.gz samba-3da86cc23f20e5b852d08aa05dacabb2d6e496e2.tar.bz2 samba-3da86cc23f20e5b852d08aa05dacabb2d6e496e2.zip |
s3: Add tevent_wait_send/recv
To me it seems that we might have this functionality already somewere... I
just can't find it. Metze, do you have an idea?
Signed-off-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/lib')
-rw-r--r-- | source3/lib/tevent_wait.c | 83 | ||||
-rw-r--r-- | source3/lib/tevent_wait.h | 37 |
2 files changed, 120 insertions, 0 deletions
diff --git a/source3/lib/tevent_wait.c b/source3/lib/tevent_wait.c new file mode 100644 index 0000000000..ec7c8cbf50 --- /dev/null +++ b/source3/lib/tevent_wait.c @@ -0,0 +1,83 @@ +/* + Unix SMB/CIFS implementation. + Implement a send/recv interface to wait for an external trigger + Copyright (C) Volker Lendecke 2012 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "lib/replace/replace.h" +#include "talloc.h" +#include "tevent.h" +#include "tevent_wait.h" +#include "lib/util/tevent_unix.h" + +struct tevent_wait_state { + struct tevent_immediate *im; + struct tevent_context *ev; +}; + +struct tevent_req *tevent_wait_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev) +{ + struct tevent_req *req; + struct tevent_wait_state *state; + + req = tevent_req_create(mem_ctx, &state, struct tevent_wait_state); + if (req == NULL) { + return NULL; + } + state->ev = ev; + state->im = tevent_create_immediate(state); + if (tevent_req_nomem(state->im, req)) { + return tevent_req_post(req, ev); + } + return req; +} + +static void tevent_wait_trigger(struct tevent_context *ctx, + struct tevent_immediate *im, + void *private_data); + +void tevent_wait_done(struct tevent_req *req) +{ + struct tevent_wait_state *state; + + if (req == NULL) { + return; + } + state = tevent_req_data(req, struct tevent_wait_state); + + tevent_schedule_immediate(state->im, state->ev, + tevent_wait_trigger, req); +} + +static void tevent_wait_trigger(struct tevent_context *ctx, + struct tevent_immediate *im, + void *private_data) +{ + struct tevent_req *req = talloc_get_type_abort( + private_data, struct tevent_req); + tevent_req_done(req); +} + +int tevent_wait_recv(struct tevent_req *req) +{ + int err; + + if (tevent_req_is_unix_error(req, &err)) { + return err; + } + return 0; +} diff --git a/source3/lib/tevent_wait.h b/source3/lib/tevent_wait.h new file mode 100644 index 0000000000..97b749191d --- /dev/null +++ b/source3/lib/tevent_wait.h @@ -0,0 +1,37 @@ +/* + Unix SMB/CIFS implementation. + Implement a send/recv interface to wait for an external trigger + Copyright (C) Volker Lendecke 2012 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _TEVENT_WAIT_H +#define _TEVENT_WAIT_H + +#include "talloc.h" +#include "tevent.h" + +/* + * Just wait for getting a tevent_wait_done. tevent_wait_done can deal with a + * NULL request. + */ + +struct tevent_req *tevent_wait_send(TALLOC_CTX *mem_ctx, + struct tevent_context *ev); +int tevent_wait_recv(struct tevent_req *req); + +void tevent_wait_done(struct tevent_req *req); + +#endif /* _TEVENT_WAIT_H */ |