summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2020-02-11 08:59:48 +0100
committerJo-Philipp Wich <jo@mein.io>2020-02-11 15:48:59 +0100
commit2ee323c01079248baa9465969df9e25b5fb68cdf (patch)
tree615cc4129ef6565270b56cb06ae9ec17a5fe6ff2
parent5f9ae5738372aaa3a6be2f0a278933563d3f191a (diff)
downloaduhttpd2-2ee323c01079248baa9465969df9e25b5fb68cdf.tar.gz
file: poke ustream after starting deferred program
When we're starting a deferred request, the related input ustream might have gone into read_blocked mode because incoming client request data exhausted the ustreams internal buffer space. When this happens, edge triggered uloop read events are "lost" and never re-triggered causing the script input to never complete. In order to avoid that deadlock situation, manually poke the input ustream using ustream_poll() after invoking client_poll_post_data() which should have drained (some) of the buffered input ustream contents. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r--file.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/file.c b/file.c
index da680a0..85487f8 100644
--- a/file.c
+++ b/file.c
@@ -753,6 +753,7 @@ static void uh_complete_request(struct client *cl)
cl->dispatch.data_blocked = false;
uh_invoke_script(cl, dr->d, dr->path ? &dr->pi : NULL);
client_poll_post_data(cl);
+ ustream_poll(cl->us);
}
}