server: improve blocked-write behaviour for handlers
We currently don't implement POLLOUT properly; we never set this for
polled events, and will repeat calls to write() if we see EAGAIN.
This change improves the behaviour when writes start to block, by
tracking when a fd is blocked. Once we detect blocking behaviour, we
supress future (non-forced) writes, and wait for POLLOUT so we know when
we can write again.
Change-Id: I809bde4e1c7c78a58ea296d5c076b3d93c272558
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
diff --git a/console-server.c b/console-server.c
index e8f0352..50ee82a 100644
--- a/console-server.c
+++ b/console-server.c
@@ -394,6 +394,19 @@
free(poller);
}
+void console_poller_set_events(struct console *console, struct poller *poller,
+ int events)
+{
+ int i;
+
+ /* find the entry in our pollers array */
+ for (i = 0; i < console->n_pollers; i++)
+ if (console->pollers[i] == poller)
+ break;
+
+ console->pollfds[i].events = events;
+}
+
static int call_pollers(struct console *console)
{
struct poller *poller;