BUG/MEDIUM: promex: Be sure to never set EOM flag on an empty HTX message

It is the same bug than "BUG/MEDIUM: stats: Be sure to never set EOM flag on
an empty HTX message". We must be sure to set the EOM flag on a non empyt
message to be sure the mux on the client will properly handle
shutdowns. Otherwise, it may miss the end of the message and considers any
shutdown as an abort.

This patch must be backported as far as 2.4. On previous version there is
still the EOM HTX block.

(cherry picked from commit be69cbdafe5a2a7939efe092b3c239eaf776c898)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit 672493974a8403fd7628e185124ec9bde23d8a61)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
diff --git a/addons/promex/service-prometheus.c b/addons/promex/service-prometheus.c
index bdd63e1..b267f98 100644
--- a/addons/promex/service-prometheus.c
+++ b/addons/promex/service-prometheus.c
@@ -1508,8 +1508,20 @@
 			/* fall through */
 
 		case PROMEX_ST_DONE:
-			/* no more data are expected. Don't add TLR because mux-h1 will take care of it */
-			res_htx->flags |= HTX_FL_EOM;
+			/* no more data are expected. If the response buffer is
+			 * empty, be sure to add something (EOT block in this
+			 * case) to have something to send. It is important to
+			 * be sure the EOM flags will be handled by the
+			 * endpoint.
+			 */
+			if (htx_is_empty(res_htx)) {
+				if (!htx_add_endof(res_htx, HTX_BLK_EOT)) {
+					si_rx_room_blk(si);
+					goto out;
+				}
+				channel_add_input(res, 1);
+			}
+		        res_htx->flags |= HTX_FL_EOM;
 			res->flags |= CF_EOI;
 			appctx->st0 = PROMEX_ST_END;
 			/* fall through */