]> source.dussan.org Git - jgit.git/commitdiff
[sshd] Fix calculation of timeout in AbstractClientProxyConnector 58/200358/4
authorStephan Wahlbrink <sw@wahlbrink.eu>
Mon, 6 Mar 2023 09:33:24 +0000 (10:33 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Mon, 6 Mar 2023 22:45:18 +0000 (23:45 +0100)
The previous implementation mixed nano seconds (elapsed) and milli
seconds (remaining) without conversion.

Change-Id: I9e1654afa47fa32c94808af3b2dd0418a372fb00

org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/proxy/AbstractClientProxyConnector.java

index a8e33af35e40541f928e6572057de5935c371ae2..a05d6415fa97f01975bcb4a3c688ae5238cf3f16 100644 (file)
@@ -27,8 +27,8 @@ import org.eclipse.jgit.internal.transport.sshd.JGitClientSession;
 public abstract class AbstractClientProxyConnector
                implements StatefulProxyConnector {
 
-       private static final long DEFAULT_PROXY_TIMEOUT_MILLIS = TimeUnit.SECONDS
-                       .toMillis(30L);
+       private static final long DEFAULT_PROXY_TIMEOUT_NANOS = TimeUnit.SECONDS
+                       .toNanos(30L);
 
        /** Guards {@link #done} and {@link #bufferedCommands}. */
        private final Object lock = new Object();
@@ -39,7 +39,7 @@ public abstract class AbstractClientProxyConnector
 
        private AtomicReference<Runnable> unregister = new AtomicReference<>();
 
-       private long remainingProxyProtocolTime = DEFAULT_PROXY_TIMEOUT_MILLIS;
+       private long remainingProxyProtocolTime = DEFAULT_PROXY_TIMEOUT_NANOS;
 
        private long lastProxyOperationTime = 0L;
 
@@ -85,12 +85,12 @@ public abstract class AbstractClientProxyConnector
         *            to initialize for
         */
        protected void init(ClientSession session) {
-               remainingProxyProtocolTime = session.getLongProperty(
+               long millis = session.getLongProperty(
                                StatefulProxyConnector.TIMEOUT_PROPERTY,
-                               DEFAULT_PROXY_TIMEOUT_MILLIS);
-               if (remainingProxyProtocolTime <= 0L) {
-                       remainingProxyProtocolTime = DEFAULT_PROXY_TIMEOUT_MILLIS;
-               }
+                               0);
+               remainingProxyProtocolTime = (millis > 0)
+                               ? TimeUnit.MILLISECONDS.toNanos(millis)
+                               : DEFAULT_PROXY_TIMEOUT_NANOS;
                if (session instanceof JGitClientSession) {
                        JGitClientSession s = (JGitClientSession) session;
                        unregister.set(() -> s.setProxyHandler(null));
@@ -115,12 +115,9 @@ public abstract class AbstractClientProxyConnector
                if (last != 0L) {
                        long elapsed = now - last;
                        remaining -= elapsed;
-                       if (remaining < 0L) {
-                               remaining = 10L; // Give it grace period.
-                       }
+                       remainingProxyProtocolTime = remaining;
                }
-               remainingProxyProtocolTime = remaining;
-               return remaining;
+               return Math.max(remaining / 1_000_000L, 10L); // Give it grace period.
        }
 
        /**