]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
varlink: check state rather than flags to determine whether it makes sense to reply 30564/head
authorLennart Poettering <lennart@poettering.net>
Fri, 24 Nov 2023 15:11:46 +0000 (16:11 +0100)
committerLennart Poettering <lennart@poettering.net>
Thu, 21 Dec 2023 14:28:01 +0000 (15:28 +0100)
We already checked the flags before, and updated the state accordingly,
hence let's only look at the state afterwards. This allows us to use the
same expressions for all cases where we want to reply automatically to
clients.

src/shared/varlink.c

index 52a946f8c9b0e09c38415a71ea2af38a3fa2402d..3735c20773bc3a5923ca91b7d5d0c5c143429e3a 100644 (file)
@@ -1335,7 +1335,7 @@ static int varlink_dispatch_method(Varlink *v) {
                         if (r < 0) {
                                 varlink_log_errno(v, r, "Parameters for method %s() didn't pass validation on field '%s': %m", method, strna(bad_field));
 
-                                if (!FLAGS_SET(flags, VARLINK_METHOD_ONEWAY)) {
+                                if (IN_SET(v->state, VARLINK_PROCESSING_METHOD, VARLINK_PROCESSING_METHOD_MORE)) {
                                         r = varlink_errorb(v, VARLINK_ERROR_INVALID_PARAMETER, JSON_BUILD_OBJECT(JSON_BUILD_PAIR_STRING("parameter", bad_field)));
                                         if (r < 0)
                                                 return r;
@@ -1350,14 +1350,14 @@ static int varlink_dispatch_method(Varlink *v) {
                                 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 (v->state != VARLINK_PROCESSED_METHOD && !FLAGS_SET(flags, VARLINK_METHOD_ONEWAY)) {
+                                if (IN_SET(v->state, VARLINK_PROCESSING_METHOD, VARLINK_PROCESSING_METHOD_MORE)) {
                                         r = varlink_error_errno(v, r);
                                         if (r < 0)
                                                 return r;
                                 }
                         }
                 }
-        } else if (!FLAGS_SET(flags, VARLINK_METHOD_ONEWAY)) {
+        } else if (IN_SET(v->state, VARLINK_PROCESSING_METHOD, VARLINK_PROCESSING_METHOD_MORE)) {
                 r = varlink_errorb(v, VARLINK_ERROR_METHOD_NOT_FOUND, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("method", JSON_BUILD_STRING(method))));
                 if (r < 0)
                         return r;