messaging3: Avoid messaging_is_self_send
authorVolker Lendecke <vl@samba.org>
Thu, 21 Aug 2014 18:41:49 +0000 (18:41 +0000)
committerJeremy Allison <jra@samba.org>
Fri, 22 Aug 2014 22:24:18 +0000 (00:24 +0200)
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>
source3/lib/messages.c

index 25d3f01ccbeacfdf50192c1940a0775288f32e34..80ecec4aaa87e444c34f779ccd6772e001cae977 100644 (file)
@@ -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