summaryrefslogtreecommitdiffstats
path: root/source3/lib/unix_msg/test_source.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_source.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_source.c')
-rw-r--r--source3/lib/unix_msg/test_source.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/source3/lib/unix_msg/test_source.c b/source3/lib/unix_msg/test_source.c
index bfafee1fd33..94984d88523 100644
--- a/source3/lib/unix_msg/test_source.c
+++ b/source3/lib/unix_msg/test_source.c
@@ -5,7 +5,8 @@
int main(int argc, const char *argv[])
{
- struct poll_funcs funcs;
+ struct poll_funcs *funcs;
+ void *tevent_handle;
struct unix_msg_ctx **ctxs;
struct tevent_context *ev;
struct iovec iov;
@@ -26,7 +27,16 @@ 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(NULL);
+ if (funcs == NULL) {
+ fprintf(stderr, "poll_funcs_init_tevent failed\n");
+ return 1;
+ }
+ tevent_handle = poll_funcs_tevent_register(NULL, funcs, ev);
+ if (tevent_handle == NULL) {
+ fprintf(stderr, "poll_funcs_tevent_register failed\n");
+ return 1;
+ }
ctxs = talloc_array(ev, struct unix_msg_ctx *, num_ctxs);
if (ctxs == NULL) {
@@ -35,7 +45,7 @@ int main(int argc, const char *argv[])
}
for (i=0; i<num_ctxs; i++) {
- ret = unix_msg_init(NULL, &funcs, 256, 1, NULL, NULL,
+ ret = unix_msg_init(NULL, funcs, 256, 1, NULL, NULL,
&ctxs[i]);
if (ret != 0) {
fprintf(stderr, "unix_msg_init failed: %s\n",