summaryrefslogtreecommitdiffstats
path: root/source3/lib/unix_msg/test_drain.c
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2014-05-05 08:45:52 +0200
committerVolker Lendecke <vl@samba.org>2014-05-08 09:10:12 +0200
commitdca572ff1ce1559a2254d9ba46d4f86d48c38c21 (patch)
treea64405496fff30d898ab000e924262b6af4275d0 /source3/lib/unix_msg/test_drain.c
parent5601576d9d182ca1741da6db5eb7cae405333329 (diff)
downloadsamba-dca572ff1ce1559a2254d9ba46d4f86d48c38c21.tar.gz
samba-dca572ff1ce1559a2254d9ba46d4f86d48c38c21.tar.xz
samba-dca572ff1ce1559a2254d9ba46d4f86d48c38c21.zip
lib: Enhance poll_funcs_tevent for multiple tevent_contexts
With this patch it will be possible to use nested event contexts with messaging_filtered_read_send/recv. Before this patchset only the one and only event context a messaging_context is initialized with is able to receive datagrams from the unix domain socket. So if you want to code a synchronous RPC-like operation using a nested event context, you will not see the reply, because the nested event context does not have the required tevent_fd's. Unfortunately, this patchset has to add some advanced array voodoo. The idea is that state->watches[] contains what we hand out with watch_new, and state->contexts contains references to the tevent_contexts. For every watch we need a tevent_fd in every event context, and the routines make sure that the arrays are properly maintained. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/lib/unix_msg/test_drain.c')
-rw-r--r--source3/lib/unix_msg/test_drain.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/source3/lib/unix_msg/test_drain.c b/source3/lib/unix_msg/test_drain.c
index 6fe8c188367..c2568b6646b 100644
--- a/source3/lib/unix_msg/test_drain.c
+++ b/source3/lib/unix_msg/test_drain.c
@@ -16,7 +16,7 @@ static void recv_cb(struct unix_msg_ctx *ctx,
int main(int argc, const char *argv[])
{
- struct poll_funcs funcs;
+ struct poll_funcs *funcs;
const char *sock;
struct unix_msg_ctx *ctx;
struct tevent_context *ev;
@@ -37,10 +37,13 @@ int main(int argc, const char *argv[])
perror("tevent_context_init failed");
return 1;
}
- poll_funcs_init_tevent(&funcs, ev);
+ funcs = poll_funcs_init_tevent(ev);
+ if (funcs == NULL) {
+ fprintf(stderr, "poll_funcs_init_tevent failed\n");
+ return 1;
+ }
- ret = unix_msg_init(sock, &funcs, 256, 1,
- recv_cb, &state, &ctx);
+ ret = unix_msg_init(sock, funcs, 256, 1, recv_cb, &state, &ctx);
if (ret != 0) {
fprintf(stderr, "unix_msg_init failed: %s\n",
strerror(ret));