From 4d8e5fefae8b8f4da87d5d9af27b32c28b91108a Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 1 Nov 2024 04:02:54 +0900 Subject: [PATCH] sd-varlink: suppress one log message when callback already successfully enqueued an error response MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow-up for d2ebf5cc1d59e29139f06efaa3a9b2c184cdaa25. The detailed error response is already logged, hence not necessary to log again with the errno converted from the error response, which typically less informative, e.g. === varlink-26-26: Setting state idle-server varlink-26-26: Received message: {"method":"io.systemd.UserDatabase.GetUserRecord","parameters":{"service":""}} varlink-26-26: Changing state idle-server → processing-method varlink-26-26: Sending message: {"error":"io.systemd.UserDatabase.BadService","parameters":{}} varlink-26-26: Changing state processing-method → processed-method varlink-26-26: Callback for io.systemd.UserDatabase.GetUserRecord returned error: Invalid request descriptor varlink-26-26: Changing state processed-method → idle-server varlink-26-26: Got POLLHUP from socket. === --- src/libsystemd/sd-varlink/sd-varlink.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/libsystemd/sd-varlink/sd-varlink.c b/src/libsystemd/sd-varlink/sd-varlink.c index 73fcc71f86..9c9160fd4e 100644 --- a/src/libsystemd/sd-varlink/sd-varlink.c +++ b/src/libsystemd/sd-varlink/sd-varlink.c @@ -1386,17 +1386,15 @@ static int varlink_dispatch_method(sd_varlink *v) { if (!invalid) { r = callback(v, parameters, flags, v->userdata); - if (r < 0) { + if (r < 0 && VARLINK_STATE_WANTS_REPLY(v->state)) { varlink_log_errno(v, r, "Callback for %s returned error: %m", method); /* We got an error back from the callback. Propagate it to the client if the * method call remains unanswered. */ - if (VARLINK_STATE_WANTS_REPLY(v->state)) { - r = sd_varlink_error_errno(v, r); - /* If we didn't manage to enqueue an error response, then fail the connection completely. */ - if (r < 0 && VARLINK_STATE_WANTS_REPLY(v->state)) - goto fail; - } + r = sd_varlink_error_errno(v, r); + /* If we didn't manage to enqueue an error response, then fail the connection completely. */ + if (r < 0 && VARLINK_STATE_WANTS_REPLY(v->state)) + goto fail; } } } else if (VARLINK_STATE_WANTS_REPLY(v->state)) {