MEDIUM: servers: Be smarter when switching connections.

When connecting to a server, and reusing a connection, always attempt to give
the owner of the previous session one of its own connections, so that one
session won't be responsible for too many connections.

This should be backported to 1.9.
diff --git a/src/backend.c b/src/backend.c
index c4711ea..b6f08d5 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -1245,27 +1245,20 @@
 	/* We're about to use another connection, let the mux know we're
 	 * done with this one
 	 */
-	if (old_conn != srv_conn || !reuse) {
+	if (old_conn != srv_conn && old_conn && reuse && !reuse_orphan) {
+		struct session *sess = srv_conn->owner;
 
-		if (srv_conn && reuse) {
-			struct session *sess = srv_conn->owner;
-
-			if (sess) {
-				if (old_conn &&
-				    !(old_conn->flags & CO_FL_PRIVATE) &&
-				    old_conn->mux != NULL &&
-				    (old_conn->mux->avail_streams(old_conn) > 0) &&
-				    (srv_conn->mux->avail_streams(srv_conn) == 1)) {
-					session_unown_conn(s->sess, old_conn);
-					old_conn->owner = sess;
-					if (!session_add_conn(sess, old_conn, s->target)) {
-						old_conn->owner = NULL;
-						old_conn->mux->destroy(old_conn);
-					} else
-						session_check_idle_conn(sess, old_conn);
-				}
+		if (sess) {
+			if (old_conn && !(old_conn->flags & CO_FL_PRIVATE) &&
+			    old_conn->mux != NULL) {
+				session_unown_conn(s->sess, old_conn);
+				old_conn->owner = sess;
+				if (!session_add_conn(sess, old_conn, s->target)) {
+					old_conn->owner = NULL;
+					old_conn->mux->destroy(old_conn);
+				} else
+					session_check_idle_conn(sess, old_conn);
 			}
-
 		}
 	}