messaging3: Make the _send function return 0/errno
authorVolker Lendecke <vl@samba.org>
Wed, 4 Jun 2014 14:36:57 +0000 (14:36 +0000)
committerJeremy Allison <jra@samba.org>
Wed, 18 Jun 2014 16:51:13 +0000 (18:51 +0200)
This is to eventually make messaging_dgm usable in ctdb

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/include/messages.h
source3/lib/messages.c
source3/lib/messages_ctdbd.c
source3/lib/messages_dgm.c

index 5784e41a05abc0c236a074ceb3e6b3445869ab65..71b344a61e5b88453d676f333e51b1982d0fd22f 100644 (file)
@@ -66,10 +66,10 @@ struct messaging_context;
 struct messaging_rec;
 
 struct messaging_backend {
-       NTSTATUS (*send_fn)(struct server_id src,
-                           struct server_id pid, int msg_type,
-                           const struct iovec *iov, int iovlen,
-                           struct messaging_backend *backend);
+       int (*send_fn)(struct server_id src,
+                      struct server_id pid, int msg_type,
+                      const struct iovec *iov, int iovlen,
+                      struct messaging_backend *backend);
        void *private_data;
 };
 
index 1263bf1698c15c07b010d35b0e82acf6d854fd82..a9015d05b06d1bb8109d3ae1259b403b0711bbd0 100644 (file)
@@ -412,14 +412,20 @@ NTSTATUS messaging_send_iov(struct messaging_context *msg_ctx,
                            struct server_id server, uint32_t msg_type,
                            const struct iovec *iov, int iovlen)
 {
+       int ret;
+
        if (server_id_is_disconnected(&server)) {
                return NT_STATUS_INVALID_PARAMETER_MIX;
        }
 
        if (!procid_is_local(&server)) {
-               return msg_ctx->remote->send_fn(msg_ctx->id, server,
-                                               msg_type, iov, iovlen,
-                                               msg_ctx->remote);
+               ret = msg_ctx->remote->send_fn(msg_ctx->id, server,
+                                              msg_type, iov, iovlen,
+                                              msg_ctx->remote);
+               if (ret != 0) {
+                       return map_nt_error_from_unix(ret);
+               }
+               return NT_STATUS_OK;
        }
 
        if (messaging_is_self_send(msg_ctx, &server)) {
@@ -444,8 +450,12 @@ NTSTATUS messaging_send_iov(struct messaging_context *msg_ctx,
                return NT_STATUS_OK;
        }
 
-       return msg_ctx->local->send_fn(msg_ctx->id, server, msg_type,
-                                      iov, iovlen, msg_ctx->local);
+       ret = msg_ctx->local->send_fn(msg_ctx->id, server, msg_type,
+                                     iov, iovlen, msg_ctx->local);
+       if (ret != 0) {
+               return map_nt_error_from_unix(ret);
+       }
+       return NT_STATUS_OK;
 }
 
 static struct messaging_rec *messaging_rec_dup(TALLOC_CTX *mem_ctx,
index 3b7fa0532282f8401a891d5611579fa89ac109f3..add089da38b48306bae1bcb5f8e1522330bc9d27 100644 (file)
@@ -88,10 +88,10 @@ struct ctdbd_connection *messaging_ctdbd_connection(void)
        return global_ctdbd_connection;
 }
 
-static NTSTATUS messaging_ctdb_send(struct server_id src,
-                                   struct server_id pid, int msg_type,
-                                   const struct iovec *iov, int iovlen,
-                                   struct messaging_backend *backend)
+static int messaging_ctdb_send(struct server_id src,
+                              struct server_id pid, int msg_type,
+                              const struct iovec *iov, int iovlen,
+                              struct messaging_backend *backend)
 {
        struct messaging_ctdbd_context *ctx = talloc_get_type_abort(
                backend->private_data, struct messaging_ctdbd_context);
@@ -102,7 +102,7 @@ static NTSTATUS messaging_ctdb_send(struct server_id src,
 
        buf = iov_buf(talloc_tos(), iov, iovlen);
        if (buf == NULL) {
-               return NT_STATUS_NO_MEMORY;
+               return ENOMEM;
        }
 
 
@@ -116,7 +116,10 @@ static NTSTATUS messaging_ctdb_send(struct server_id src,
 
        TALLOC_FREE(buf);
 
-       return status;
+       if (NT_STATUS_IS_OK(status)) {
+               return 0;
+       }
+       return map_errno_from_nt_status(status);
 }
 
 static int messaging_ctdbd_destructor(struct messaging_ctdbd_context *ctx)
index 09b635db56db90b17a0c6c1bed2eccbda7c5c174..fb0419da5b03e48bb21a2088381868a9d287e088 100644 (file)
@@ -44,10 +44,10 @@ struct messaging_dgm_hdr {
        struct server_id src;
 };
 
-static NTSTATUS messaging_dgm_send(struct server_id src,
-                                  struct server_id pid, int msg_type,
-                                  const struct iovec *iov, int iovlen,
-                                  struct messaging_backend *backend);
+static int messaging_dgm_send(struct server_id src,
+                             struct server_id pid, int msg_type,
+                             const struct iovec *iov, int iovlen,
+                             struct messaging_backend *backend);
 static void messaging_dgm_recv(struct unix_msg_ctx *ctx,
                               uint8_t *msg, size_t msg_len,
                               void *private_data);
@@ -292,10 +292,10 @@ static int messaging_dgm_context_destructor(struct messaging_dgm_context *c)
        return 0;
 }
 
-static NTSTATUS messaging_dgm_send(struct server_id src,
-                                  struct server_id pid, int msg_type,
-                                  const struct iovec *iov, int iovlen,
-                                  struct messaging_backend *backend)
+static int messaging_dgm_send(struct server_id src,
+                             struct server_id pid, int msg_type,
+                             const struct iovec *iov, int iovlen,
+                             struct messaging_backend *backend)
 {
        struct messaging_dgm_context *ctx = talloc_get_type_abort(
                backend->private_data, struct messaging_dgm_context);
@@ -311,7 +311,7 @@ static NTSTATUS messaging_dgm_send(struct server_id src,
        dst_pathlen = snprintf(dst.sun_path, sizeof(dst.sun_path),
                               "%s/msg/%u", ctx->cache_dir, (unsigned)pid.pid);
        if (dst_pathlen >= sizeof(dst.sun_path)) {
-               return NT_STATUS_NAME_TOO_LONG;
+               return ENAMETOOLONG;
        }
 
        hdr.msg_version = MESSAGE_VERSION;
@@ -331,10 +331,7 @@ static NTSTATUS messaging_dgm_send(struct server_id src,
        ret = unix_msg_send(ctx->dgm_ctx, &dst, iov2, iovlen + 1);
        unbecome_root();
 
-       if (ret != 0) {
-               return map_nt_error_from_unix(ret);
-       }
-       return NT_STATUS_OK;
+       return ret;
 }
 
 static void messaging_dgm_recv(struct unix_msg_ctx *ctx,