BUG/MEDIUM: connection: Add a new CS_FL_ERR_PENDING flag to conn_streams.

Add a new flag to conn_streams, CS_FL_ERR_PENDING. This is to be set instead
of CS_FL_ERR in case there's still more data to be read, so that we read all
the data before closing.
diff --git a/include/types/connection.h b/include/types/connection.h
index d1819cc..3b7f4e1 100644
--- a/include/types/connection.h
+++ b/include/types/connection.h
@@ -81,6 +81,7 @@
 	CS_FL_ERROR         = 0x00000100,  /* a fatal error was reported */
 	CS_FL_RCV_MORE      = 0x00000200,  /* We may have more bytes to transfert */
 	CS_FL_WANT_ROOM     = 0x00000400,  /* More bytes to transfert, but not enough room */
+	CS_FL_ERR_PENDING   = 0x00000800,  /* An error is pending, but there's still data to be read */
 	CS_FL_EOS           = 0x00001000,  /* End of stream delivered to data layer */
 	CS_FL_REOS          = 0x00002000,  /* End of stream received (buffer not empty) */
 	CS_FL_WAIT_FOR_HS   = 0x00010000,  /* This stream is waiting for handhskae */
diff --git a/src/mux_h2.c b/src/mux_h2.c
index dc28b12..6c160d0 100644
--- a/src/mux_h2.c
+++ b/src/mux_h2.c
@@ -1739,7 +1739,7 @@
 	h2s_close(h2s);
 
 	if (h2s->cs) {
-		h2s->cs->flags |= CS_FL_REOS | CS_FL_ERROR;
+		h2s->cs->flags |= CS_FL_REOS | CS_FL_ERR_PENDING;
 		if (h2s->recv_wait) {
 			struct wait_event *sw = h2s->recv_wait;
 
@@ -4595,6 +4595,8 @@
 		if (htx_is_empty(h2s_htx)) {
 			if (cs->flags & CS_FL_REOS)
 				cs->flags |= CS_FL_EOS;
+			if (cs->flags & CS_FL_ERR_PENDING)
+				cs->flags |= CS_FL_ERROR;
 			goto end;
 		}
 
@@ -4618,6 +4620,8 @@
 		cs->flags &= ~(CS_FL_RCV_MORE | CS_FL_WANT_ROOM);
 		if (cs->flags & CS_FL_REOS)
 			cs->flags |= CS_FL_EOS;
+		if (cs->flags & CS_FL_ERR_PENDING)
+			cs->flags |= CS_FL_ERROR;
 		if (b_size(&h2s->rxbuf)) {
 			b_free(&h2s->rxbuf);
 			offer_buffers(NULL, tasks_run_queue);