server: use ringbuffer for all handlers
Currently, we use the a ringbuffer within the socket handler to manage
bursts of data to slower clients.
However, we're also seeing cases where the local tty handler becomes
blocking as well. So, we want to implement a buffer within the tty
handler too.
This change moves the ringbuffer 'up a layer' - from the socket handler
to the core console code.
We remove the ->data_in callback from handlers, and work on the
assumption that handlers have registered their own consumer on the
console's ringbuffer (through a new helper function,
console_ringbuffer_consumer_register()).
Change-Id: Ie8f02d6632578c50bb5e2dfb9bee6ece86432135
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
diff --git a/socket-handler.c b/socket-handler.c
index 24389c9..cf5a2de 100644
--- a/socket-handler.c
+++ b/socket-handler.c
@@ -32,8 +32,6 @@
#include "console-server.h"
-const size_t buffer_size = 128 * 1024;
-
struct client {
struct socket_handler *sh;
struct poller *poller;
@@ -45,7 +43,6 @@
struct handler handler;
struct console *console;
struct poller *poller;
- struct ringbuffer *ringbuffer;
int sd;
struct client **clients;
@@ -224,7 +221,7 @@
client->fd = fd;
client->poller = console_poller_register(sh->console, handler,
client_poll, client->fd, POLLIN, client);
- client->rbc = ringbuffer_consumer_register(sh->ringbuffer,
+ client->rbc = console_ringbuffer_consumer_register(sh->console,
client_ringbuffer_poll, client);
n = sh->n_clients++;
@@ -247,12 +244,6 @@
sh->clients = NULL;
sh->n_clients = 0;
- sh->ringbuffer = ringbuffer_init(buffer_size);
- if (!sh->ringbuffer) {
- warn("Can't allocate backlog ring buffer");
- return -1;
- }
-
sh->sd = socket(AF_UNIX, SOCK_STREAM, 0);
if(sh->sd < 0) {
warn("Can't create socket");
@@ -282,13 +273,6 @@
return 0;
}
-static int socket_data(struct handler *handler, uint8_t *buf, size_t len)
-{
- struct socket_handler *sh = to_socket_handler(handler);
- ringbuffer_queue(sh->ringbuffer, buf, len);
- return 0;
-}
-
static void socket_fini(struct handler *handler)
{
struct socket_handler *sh = to_socket_handler(handler);
@@ -299,9 +283,6 @@
if (sh->poller)
console_poller_unregister(sh->console, sh->poller);
- if (sh->ringbuffer)
- ringbuffer_fini(sh->ringbuffer);
-
close(sh->sd);
}
@@ -309,7 +290,6 @@
.handler = {
.name = "socket",
.init = socket_init,
- .data_in = socket_data,
.fini = socket_fini,
},
};