From 7ee3bbc86bd6ca20fafe5c2c1f70adf3116334c9 Mon Sep 17 00:00:00 2001 From: Přemysl Janouch Date: Tue, 23 Sep 2014 19:52:05 +0200 Subject: Fix on_unit_ready() Got it wrong and lighttpd doesn't have any mercy. --- ponymap.c | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/ponymap.c b/ponymap.c index bfb75c5..e14ac16 100644 --- a/ponymap.c +++ b/ponymap.c @@ -565,12 +565,15 @@ unit_update_poller (struct unit *u, const struct pollfd *pfd) static void on_unit_ready (const struct pollfd *pfd, struct unit *u) { - struct transport *transport = u->transport; struct service *service = u->service; + struct transport *transport = u->transport; enum transport_io_result result; + bool got_eof = false; + + if ((result = transport->on_readable (u)) == TRANSPORT_IO_ERROR) + goto error; + got_eof |= result == TRANSPORT_IO_EOF; - if ((result = transport->on_readable (u))) - goto exception; if (u->read_buffer.len) { struct str *buf = &u->read_buffer; @@ -581,23 +584,24 @@ on_unit_ready (const struct pollfd *pfd, struct unit *u) goto abort; } - if ((result = transport->on_writeable (u))) - goto exception; + if ((result = transport->on_writeable (u)) == TRANSPORT_IO_ERROR) + goto error; + got_eof |= result == TRANSPORT_IO_EOF; - unit_update_poller (u, pfd); - return; - -exception: - if (result == TRANSPORT_IO_EOF) + if (got_eof) { if (service->on_eof) service->on_eof (u->service_data, u); + if (u->abortion_requested || !u->write_buffer.len) + goto abort; } - else if (result == TRANSPORT_IO_ERROR) - { - if (service->on_error) - service->on_error (u->service_data, u); - } + + unit_update_poller (u, pfd); + return; + +error: + if (service->on_error) + service->on_error (u->service_data, u); abort: unit_abort (u); -- cgit v1.2.3-70-g09d2