[Openvpn-devel,XS] Change in openvpn[master]: Only schedule_exit() once

Message ID d8405445a87eb086b0adeaaa12cb3235f47efffa-HTML@gerrit.openvpn.net
State New
Headers show
Series [Openvpn-devel,XS] Change in openvpn[master]: Only schedule_exit() once | expand

Commit Message

plaisthos (Code Review) April 22, 2024, 11:05 a.m. UTC
Attention is currently required from: flichtenheld, plaisthos.

Hello plaisthos, flichtenheld,

I'd like you to do a code review.
Please visit

    http://gerrit.openvpn.net/c/openvpn/+/555?usp=email

to review the following change.


Change subject: Only schedule_exit() once
......................................................................

Only schedule_exit() once

If an exit has already been scheduled we should not schedule it again.
Otherwise, the exit signal is never emitted if the peer reschedules the
exit before the timeout occurs.

Change-Id: I9457f005f4ba970502e6b667d9dc4299a588d661
Signed-off-by: Reynir Björnsson <reynir@reynir.dk>
---
M src/openvpn/forward.c
1 file changed, 5 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/55/555/1

Patch

diff --git a/src/openvpn/forward.c b/src/openvpn/forward.c
index 8d10f25..70f8e9d 100644
--- a/src/openvpn/forward.c
+++ b/src/openvpn/forward.c
@@ -519,6 +519,11 @@ 
 void
 schedule_exit(struct context *c, const int n_seconds, const int signal)
 {
+    /* don't reschedule if already scheduled; we drop the new signal, but it
+     * only ever seems to be SIGTERM anyway. */
+    if (event_timeout_defined(&c->c2.scheduled_exit)) {
+        return;
+    }
     tls_set_single_session(c->c2.tls_multi);
     update_time();
     reset_coarse_timers(c);