From 4852cdb954cd0d685bd4be7e69abfeb3e5388cc6 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Wed, 3 Apr 2019 17:47:20 -0400 Subject: [PATCH] Propagate error for clear command Signed-off-by: Mathieu Desnoyers Signed-off-by: Jonathan Rajotte --- src/bin/lttng-relayd/main.c | 10 ++++++---- src/bin/lttng-sessiond/clear.c | 2 +- src/bin/lttng-sessiond/consumer.c | 1 - src/bin/lttng-sessiond/main.c | 3 --- src/common/consumer/consumer.c | 2 +- src/common/relayd/relayd.c | 9 ++++----- 6 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c index 0e95c9481..c9b3c9f54 100644 --- a/src/bin/lttng-relayd/main.c +++ b/src/bin/lttng-relayd/main.c @@ -1463,6 +1463,8 @@ int relay_clear_session(const struct lttcomm_relayd_hdr *recv_hdr, struct relay_session *session = conn->session; struct lttcomm_relayd_generic_reply reply; + memset(&reply, 0, sizeof(reply)); + DBG("Clear session received"); if (!session || !conn->version_check_done) { @@ -1473,17 +1475,17 @@ int relay_clear_session(const struct lttcomm_relayd_hdr *recv_hdr, if (!opt_allow_clear) { ERR("Trying to clear session, but clear is disallowed."); - ret = -1; - goto end_no_session; + ret = 0; + reply.ret_code = htobe32(LTTNG_ERR_CLEAR_RELAY_DISALLOW); + goto reply; } ret = session_clear(session); - - memset(&reply, 0, sizeof(reply)); if (ret < 0) { reply.ret_code = htobe32(LTTNG_ERR_UNK); } else { reply.ret_code = htobe32(LTTNG_OK); } +reply: send_ret = conn->sock->ops->sendmsg(conn->sock, &reply, sizeof(struct lttcomm_relayd_generic_reply), 0); if (send_ret < (ssize_t) sizeof(reply)) { diff --git a/src/bin/lttng-sessiond/clear.c b/src/bin/lttng-sessiond/clear.c index e83818dc0..8ac77d3b6 100644 --- a/src/bin/lttng-sessiond/clear.c +++ b/src/bin/lttng-sessiond/clear.c @@ -74,7 +74,7 @@ int cmd_clear_session(struct ltt_session *session) */ ret = consumer_clear_session(session); if (ret < 0) { - ret = LTTNG_ERR_CLEAR_FAIL_CONSUMER; + ret = -ret; goto error; } ret = LTTNG_OK; diff --git a/src/bin/lttng-sessiond/consumer.c b/src/bin/lttng-sessiond/consumer.c index f286df943..c1e018523 100644 --- a/src/bin/lttng-sessiond/consumer.c +++ b/src/bin/lttng-sessiond/consumer.c @@ -147,7 +147,6 @@ int consumer_recv_status_reply(struct consumer_socket *sock) ret = 0; } else { ret = -reply.ret_code; - DBG("Consumer ret code %d", ret); } end: diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index 670ebc747..27c32e4d8 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -4064,9 +4064,6 @@ error_add_context: case LTTNG_CLEAR_SESSION: { ret = cmd_clear_session(cmd_ctx->session); - if (ret != LTTNG_OK) { - goto error; - } break; } default: diff --git a/src/common/consumer/consumer.c b/src/common/consumer/consumer.c index 7b8782b2e..d46fc30a9 100644 --- a/src/common/consumer/consumer.c +++ b/src/common/consumer/consumer.c @@ -4098,7 +4098,7 @@ int lttng_consumer_clear_session(uint64_t session_id) } ret = relayd_clear_session(&relayd->control_sock); if (ret < 0) { - ret = LTTCOMM_CONSUMERD_FATAL; + ret = -ret; goto end; } break; /* Stop after first match. */ diff --git a/src/common/relayd/relayd.c b/src/common/relayd/relayd.c index 9f0cf1e3e..9e25a25eb 100644 --- a/src/common/relayd/relayd.c +++ b/src/common/relayd/relayd.c @@ -969,17 +969,16 @@ int relayd_clear_session(struct lttcomm_relayd_sock *rsock) reply.ret_code = be32toh(reply.ret_code); - /* Return session id or negative ret code. */ + /* Return 0 if OK, or negative ret code. */ if (reply.ret_code != LTTNG_OK) { - ret = -1; - ERR("Relayd clear session replied error %d", reply.ret_code); + ret = -reply.ret_code; + DBG("Relayd clear session failed"); } else { /* Success */ ret = 0; + DBG("Relayd clear session successful"); } - DBG("Relayd clear session successful"); - error: return ret; } -- 2.34.1