[CLEANUP] process_session: move debug outputs out of the critical loop

The if(debug&closed) printfs have moved outside of the loop. It also
permitted to merge several of them.
diff --git a/src/proto_http.c b/src/proto_http.c
index 3eb9e15..09cf587 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -706,28 +706,6 @@
 			if (may_dequeue_tasks(s->srv, s->be))
 				process_srv_queue(s->srv);
 		}
-
-		if (unlikely((s->req->cons->state == SI_ST_CLO) &&
-			     (global.mode & MODE_DEBUG) &&
-			     (!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)))) {
-			int len;
-			len = sprintf(trash, "%08x:%s.srvcls[%04x:%04x]\n",
-				      s->uniq_id, s->be->id, (unsigned short)s->req->prod->fd, (unsigned short)s->req->cons->fd);
-			write(1, trash, len);
-		}
-	}
-
-	/* This is needed when debugging is enabled, to indicate client-side close */
-	if (unlikely(s->rep->cons->state == SI_ST_CLO &&
-		     s->rep->cons->prev_state == SI_ST_EST)) {
-		if (unlikely((s->rep->cons->state == SI_ST_CLO) &&
-			     (global.mode & MODE_DEBUG) &&
-			     (!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)))) {
-			int len;
-			len = sprintf(trash, "%08x:%s.clicls[%04x:%04x]\n",
-				      s->uniq_id, s->be->id, (unsigned short)s->rep->prod->fd, (unsigned short)s->req->cons->fd);
-			write(1, trash, len);
-		}
 	}
 
 	/* Dirty trick: force one first pass everywhere */
@@ -763,15 +741,6 @@
 				stream_sock_data_update(s->rep->cons->fd);
 				rqf_cli = s->req->flags;
 				rpf_cli = s->rep->flags;
-
-				if (unlikely((s->rep->cons->state == SI_ST_CLO) &&
-					     (global.mode & MODE_DEBUG) &&
-					     (!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)))) {
-						int len;
-						len = sprintf(trash, "%08x:%s.clicls[%04x:%04x]\n",
-							      s->uniq_id, s->be->id, (unsigned short)s->rep->prod->fd, (unsigned short)s->req->cons->fd);
-						write(1, trash, len);
-				}
 			}
 		}
 
@@ -811,15 +780,6 @@
 				}
 				rqf_srv = s->req->flags;
 				rpf_srv = s->rep->flags;
-
-				if (unlikely((s->req->cons->state == SI_ST_CLO) &&
-					     (global.mode & MODE_DEBUG) &&
-					     (!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)))) {
-						int len;
-						len = sprintf(trash, "%08x:%s.srvcls[%04x:%04x]\n",
-							      s->uniq_id, s->be->id, (unsigned short)s->req->prod->fd, (unsigned short)s->req->cons->fd);
-						write(1, trash, len);
-				}
 			}
 		}
 
@@ -885,6 +845,35 @@
 		rpf_srv &= BF_CLEAR_READ & BF_CLEAR_WRITE & BF_CLEAR_TIMEOUT;
 	} while (resync);
 
+	/* This is needed only when debugging is enabled, to indicate
+	 * client-side or server-side close. Please note that in the unlikely
+	 * event where both sides would close at once, the sequence is reported
+	 * on the server side first.
+	 */
+	if (unlikely((global.mode & MODE_DEBUG) &&
+		     (!(global.mode & MODE_QUIET) ||
+		      (global.mode & MODE_VERBOSE)))) {
+		int len;
+
+		if (s->si[1].state == SI_ST_CLO &&
+		    s->si[1].prev_state == SI_ST_EST) {
+			len = sprintf(trash, "%08x:%s.srvcls[%04x:%04x]\n",
+				      s->uniq_id, s->be->id,
+				      (unsigned short)s->si[0].fd,
+				      (unsigned short)s->si[1].fd);
+			write(1, trash, len);
+		}
+
+		if (s->si[0].state == SI_ST_CLO &&
+		    s->si[0].prev_state == SI_ST_EST) {
+			len = sprintf(trash, "%08x:%s.clicls[%04x:%04x]\n",
+				      s->uniq_id, s->be->id,
+				      (unsigned short)s->si[0].fd,
+				      (unsigned short)s->si[1].fd);
+			write(1, trash, len);
+		}
+	}
+
 	if (likely((s->rep->cons->state != SI_ST_CLO) ||
 		   (s->req->cons->state != SI_ST_CLO && s->req->cons->state != SI_ST_INI))) {