BUG/MEDIUM: h1: In h1_init(), wake the tasklet instead of calling h1_recv().
In h1_init(), instead of calling h1_recv() directly, just wake the tasklet,
so that the receive will be done later.
h1_init() might be called from connect_server(), which is itself called
indirectly from process_stream(), and if the receive fails, we may call
si_cs_process(), which may destroy the channel buffers while process_stream()
still expects them to exist.
This should be backported to 1.9.
diff --git a/src/mux_h1.c b/src/mux_h1.c
index 4658e48..742572a 100644
--- a/src/mux_h1.c
+++ b/src/mux_h1.c
@@ -414,8 +414,7 @@
task_queue(t);
/* Try to read, if nothing is available yet we'll just subscribe */
- if (h1_recv(h1c))
- h1_process(h1c);
+ tasklet_wakeup(h1c->wait_event.task);
/* mux->wake will be called soon to complete the operation */
return 0;