summaryrefslogtreecommitdiffstats
path: root/source3/lib/messages.c
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2014-08-21 18:41:49 +0000
committerJeremy Allison <jra@samba.org>2014-08-23 00:24:18 +0200
commit20ef305cfa8af5437ded8bd093e4f9c487ee82a7 (patch)
tree2f0df101f2c22be9122d5bc04bc72c5cf482f375 /source3/lib/messages.c
parent46e912210d62baf895c3e526be5109724475b536 (diff)
downloadsamba-20ef305cfa8af5437ded8bd093e4f9c487ee82a7.tar.gz
samba-20ef305cfa8af5437ded8bd093e4f9c487ee82a7.tar.xz
samba-20ef305cfa8af5437ded8bd093e4f9c487ee82a7.zip
messaging3: Avoid messaging_is_self_send
This was a bad API, and it was used in a buggy way: In messaging_dispatch_rec we always did the defer, we referenced the destination pid, not the source. In messaging_send_iov this is the right thing to do to reference the destination, but when we have arrived in messaging_dispatch_rec we should compare source and destination. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/lib/messages.c')
-rw-r--r--source3/lib/messages.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/source3/lib/messages.c b/source3/lib/messages.c
index 25d3f01ccb..80ecec4aaa 100644
--- a/source3/lib/messages.c
+++ b/source3/lib/messages.c
@@ -403,13 +403,6 @@ void messaging_deregister(struct messaging_context *ctx, uint32_t msg_type,
}
}
-static bool messaging_is_self_send(const struct messaging_context *msg_ctx,
- const struct server_id *dst)
-{
- return ((msg_ctx->id.vnn == dst->vnn) &&
- (msg_ctx->id.pid == dst->pid));
-}
-
/*
Send a message to a particular server
*/
@@ -455,10 +448,14 @@ NTSTATUS messaging_send_iov(struct messaging_context *msg_ctx,
return NT_STATUS_OK;
}
- if (messaging_is_self_send(msg_ctx, &server)) {
+ if (server_id_same_process(&msg_ctx->id, &server)) {
struct messaging_rec rec;
uint8_t *buf;
+ /*
+ * Self-send, directly dispatch
+ */
+
buf = iov_buf(talloc_tos(), iov, iovlen);
if (buf == NULL) {
return NT_STATUS_NO_MEMORY;
@@ -827,7 +824,7 @@ void messaging_dispatch_rec(struct messaging_context *msg_ctx,
continue;
}
- if (messaging_is_self_send(msg_ctx, &rec->dest)) {
+ if (server_id_same_process(&rec->src, &rec->dest)) {
/*
* This is a self-send. We are called here from
* messaging_send(), and we don't want to directly