X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=ltt-sessiond%2Fust-comm.c;h=455d40c0af68cedb941120b5759d05fb5e4e75be;hb=558e70e9829c97ecd228516f6e312768be0536d7;hp=accd4276d27c48156bfebb3e0a92602f75b6c60f;hpb=099e26bda04bd3e02eee5b0a17fc0d7f47e3f8ea;p=lttng-tools.git diff --git a/ltt-sessiond/ust-comm.c b/ltt-sessiond/ust-comm.c index accd4276d..455d40c0a 100644 --- a/ltt-sessiond/ust-comm.c +++ b/ltt-sessiond/ust-comm.c @@ -16,22 +16,30 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include + #include #include "ust-comm.h" /* * Send msg containing a command to an UST application via sock and wait for - * the reply. + * the reply. Caller must free() the reply structure sent back. * - * Return -1 on error or if reply fails else return 0. + * Return the replied structure or NULL. */ -int ustcomm_send_command(int sock, struct lttcomm_ust_msg *msg) +struct lttcomm_ust_reply *ustcomm_send_command(int sock, + struct lttcomm_ust_msg *msg) { ssize_t len; - struct lttcomm_ust_reply reply; + struct lttcomm_ust_reply *reply; - DBG("Sending UST command %d to sock %d", msg->cmd, sock); + /* Extra safety */ + if (msg == NULL || sock < 0) { + goto error; + } + + DBG2("Sending UST command %d to sock %d", msg->cmd, sock); /* Send UST msg */ len = lttcomm_send_unix_sock(sock, msg, sizeof(*msg)); @@ -39,20 +47,22 @@ int ustcomm_send_command(int sock, struct lttcomm_ust_msg *msg) goto error; } - DBG("Receiving UST reply on sock %d", sock); - - /* Get UST reply */ - len = lttcomm_recv_unix_sock(sock, &reply, sizeof(reply)); - if (len < 0) { + reply = malloc(sizeof(struct lttcomm_ust_reply)); + if (reply == NULL) { + perror("malloc ust reply"); goto error; } - if (reply.ret_code != LTTCOMM_OK) { + DBG2("Receiving UST reply on sock %d", sock); + + /* Get UST reply */ + len = lttcomm_recv_unix_sock(sock, reply, sizeof(*reply)); + if (len < 0 || len < sizeof(*reply)) { goto error; } - return 0; + return reply; error: - return -1; + return NULL; }