MINOR: h2: update the {MUX,DEM}_{M,D}ALLOC flags on buffer availability

Flag H2_CF_DEM_DALLOC is set when the demux buffer fails to be allocated
in the recv() callback, and is cleared when it succeeds.

Both flags H2_CF_MUX_MALLOC and H2_CF_DEM_MROOM are cleared when the mux
buffer allocation succeeds.

In both cases it will be up to the callers to report allocation failures.
diff --git a/src/mux_h2.c b/src/mux_h2.c
index 2d6d1b9..759c6a1 100644
--- a/src/mux_h2.c
+++ b/src/mux_h2.c
@@ -191,7 +191,9 @@
 
 	/* take the buffer now as we'll get scheduled waiting for ->wake() */
 	if (b_alloc_margin(&h2c->dbuf, 0)) {
-		conn_xprt_want_recv(h2c->conn);
+		h2c->flags &= ~H2_CF_DEM_DALLOC;
+		if (!(h2c->flags & H2_CF_DEM_BLOCK_ANY))
+			conn_xprt_want_recv(h2c->conn);
 		return 1;
 	}
 	return 0;
@@ -232,11 +234,22 @@
 
 	/* take the buffer now as we'll get scheduled waiting for ->wake(). */
 	if (b_alloc_margin(&h2c->mbuf, 0)) {
+		if (h2c->flags & H2_CF_MUX_MALLOC) {
+			h2c->flags &= ~H2_CF_MUX_MALLOC;
+			if (!(h2c->flags & H2_CF_MUX_BLOCK_ANY))
+				conn_xprt_want_send(h2c->conn);
+		}
+
+		if (h2c->flags & H2_CF_DEM_MROOM) {
+			h2c->flags &= ~H2_CF_DEM_MROOM;
+			if (!(h2c->flags & H2_CF_DEM_BLOCK_ANY))
+				conn_xprt_want_recv(h2c->conn);
+		}
+
 		/* FIXME: we should in fact call something like h2_update_poll()
 		 * now to recompte the polling. For now it will be enough like
 		 * this.
 		 */
-		conn_xprt_want_recv(h2c->conn);
 		return 1;
 	}
 	return 0;
@@ -579,8 +592,10 @@
 		goto error;
 
 	buf = h2_get_dbuf(h2c);
-	if (!buf)
+	if (!buf) {
+		h2c->flags |= H2_CF_DEM_DALLOC;
 		return;
+	}
 
 	/* note: buf->o == 0 */
 	max = buf->size - buf->i;