network/queue: do not increase reference counter when remove request is not queued
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 27 Nov 2024 16:44:23 +0000 (01:44 +0900)
committerLuca Boccassi <luca.boccassi@gmail.com>
Wed, 27 Nov 2024 19:24:50 +0000 (19:24 +0000)
Fixes a bug introduced by ef45f5c8d0bfbeda2a57b28bba9831f044b23b21.
Fixes #35164.

src/network/networkd-queue.c
src/network/networkd-queue.h

index f5ad7483976e2ca38df1332ee6d174a801f80e92..7b5060a049e11aa738c6e622e25d6ced343833e6 100644 (file)
@@ -439,7 +439,7 @@ int remove_request_add(
          * MANAGER_TERMINATING or MANAGER_RESTARTING. When the manager is in MANAGER_STOPPED, we cannot
          * queue new remove requests anymore with the same reason explained in request_new(). */
         if (manager->state == MANAGER_STOPPED)
-                return 0;
+                return 0; /* ignored */
 
         req = new(RemoveRequest, 1);
         if (!req)
@@ -462,7 +462,7 @@ int remove_request_add(
         req->unref_func = unref_func;
 
         TAKE_PTR(req);
-        return 0;
+        return 1; /* queued */
 }
 
 int manager_process_remove_requests(Manager *manager) {
index b50851ecdd68b65658871c5563b81be2a19f7a56..8600ffe8697d41afded7d152e9a2427deadb963d 100644 (file)
@@ -184,7 +184,7 @@ int remove_request_add(
                 _r = remove_request_add(manager, link, _data,           \
                                         (mfree_func_t) name##_unref,    \
                                         nl, m, handler);                \
-                if (_r >= 0)                                            \
+                if (_r > 0)                                             \
                         name##_ref(_data);                              \
                 _r;                                                     \
         })