]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
management: resync timer on bytecount interval change
authorRalf Lici <ralf@mandelbit.com>
Tue, 2 Sep 2025 16:00:44 +0000 (18:00 +0200)
committerGert Doering <gert@greenie.muc.de>
Tue, 2 Sep 2025 16:07:31 +0000 (18:07 +0200)
coarse_timer_wakeup tracks when the next timer-driven task will occur.
If a user issues `bytecount n` via the management interface, but the
next scheduled wakeup is more than n seconds away, bandwidth logging
will be delayed until that timer fires.

To ensure timely logging, reset the timer whenever a new `bytecount`
command is received. This guarantees that logging begins exactly n
seconds after the command, matching the user-defined interval.

Change-Id: Ic0035d52e0ea123398318870d2f4d21af927a602
Signed-off-by: Ralf Lici <ralf@mandelbit.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20250902160050.18640-1-gert@greenie.muc.de>
URL: https://sourceforge.net/p/openvpn/mailman/message/59228306/
Signed-off-by: Gert Doering <gert@greenie.muc.de>
src/openvpn/manage.c

index 52b0e5e25c1dc843cd035b53aa0bcefec87f60b9..422aa0bc92b8db2f5db558207841169765cb5556 100644 (file)
@@ -514,6 +514,28 @@ man_bytecount(struct management *man, const int update_seconds)
         man->connection.bytecount_update_seconds = 0;
         event_timeout_clear(&man->connection.bytecount_update_interval);
     }
+
+    /* The newly received bytecount interval may be sooner than the existing
+     * coarse timer wakeup. Reset the timer to ensure it fires at the correct,
+     * earlier time.
+     */
+    if (man->persist.callback.arg)
+    {
+        struct context *c;
+
+        if (man->settings.flags & MF_SERVER)
+        {
+            struct multi_context *m = man->persist.callback.arg;
+            c = &m->top;
+        }
+        else
+        {
+            c = man->persist.callback.arg;
+        }
+
+        reset_coarse_timers(c);
+    }
+
     msg(M_CLIENT, "SUCCESS: bytecount interval changed");
 }