aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Wahlbrink <sw@wahlbrink.eu>2023-03-06 10:33:24 +0100
committerMatthias Sohn <matthias.sohn@sap.com>2023-03-06 23:45:18 +0100
commit47ecb0096ea770e219d82432178860a557b1ff9a (patch)
tree5cfaff6fc5f238f9413bb1100c26c6b49bebacec
parent9be2b7f8a885926fa3d4f6e444223034106e6711 (diff)
downloadjgit-47ecb0096ea770e219d82432178860a557b1ff9a.tar.gz
jgit-47ecb0096ea770e219d82432178860a557b1ff9a.zip
[sshd] Fix calculation of timeout in AbstractClientProxyConnector
The previous implementation mixed nano seconds (elapsed) and milli seconds (remaining) without conversion. Change-Id: I9e1654afa47fa32c94808af3b2dd0418a372fb00
-rw-r--r--org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/proxy/AbstractClientProxyConnector.java23
1 files changed, 10 insertions, 13 deletions
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/proxy/AbstractClientProxyConnector.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/proxy/AbstractClientProxyConnector.java
index a8e33af35e..a05d6415fa 100644
--- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/proxy/AbstractClientProxyConnector.java
+++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/proxy/AbstractClientProxyConnector.java
@@ -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.
}
/**