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;