Merge branch 'stable-2.13' into stable-2.14

* stable-2.13:
  Allow setting Jetty HTTPD socket timeout

Change-Id: Ic37eb4993a88980cf18f0c9de5732b9060a4b75b
diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt
index 8482b92..ebe6ddb 100644
--- a/Documentation/config-gerrit.txt
+++ b/Documentation/config-gerrit.txt
@@ -2522,6 +2522,21 @@
 	filterClass = org.anyorg.MySecureIPFilter
 ----
 
+[[httpd.idleTimeout]]httpd.idleTimeout::
++
+Maximum idle time for a connection, which roughly translates to the
+TCP socket `SO_TIMEOUT`.
++
+The max idle time is applied:
+* When waiting for a new message to be received on a connection
+* When waiting for a new message to be sent on a connection
++
+This value is interpreted as the maximum time between some progress
+being made on the connection. So if a single byte is read or written,
+then the timeout is reset.
++
+By default, 30 seconds.
+
 [[httpd.robotsFile]]httpd.robotsFile::
 +
 Location of an external robots.txt file to be used instead of the one
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java
index 4fa2a98..c7606d6 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/http/jetty/JettyServer.java
@@ -277,6 +277,7 @@
       }
       c.setInheritChannel(cfg.getBoolean("httpd", "inheritChannel", false));
       c.setReuseAddress(reuseAddress);
+      c.setIdleTimeout(cfg.getTimeUnit("httpd", null, "idleTimeout", 30000L, MILLISECONDS));
       connectors[idx] = c;
     }
     return connectors;