Mercurial > dovecot > original-hg > dovecot-1.2
changeset 3398:97b996dd5942 HEAD
If worker process has been idle for 10 minutes, make it kill itself.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 28 May 2005 15:51:43 +0300 |
parents | 2db396230881 |
children | c8777e7773f8 |
files | src/auth/auth-worker-client.c |
diffstat | 1 files changed, 21 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/auth/auth-worker-client.c Sat May 28 15:34:24 2005 +0300 +++ b/src/auth/auth-worker-client.c Sat May 28 15:51:43 2005 +0300 @@ -11,6 +11,9 @@ #include <stdlib.h> +/* If no requests have come within this time, kill ourself */ +#define AUTH_WORKER_MAX_IDLE (60*10) + #define OUTBUF_THROTTLE_SIZE (1024*10) struct auth_worker_client { @@ -21,6 +24,9 @@ struct io *io; struct istream *input; struct ostream *output; + + time_t last_request; + struct timeout *to; }; static void auth_worker_client_unref(struct auth_worker_client *client); @@ -306,6 +312,8 @@ return; } + client->last_request = ioloop_time; + client->refcount++; while ((line = i_stream_next_line(client->input)) != NULL) { t_push(); @@ -338,6 +346,14 @@ return 1; } +static void auth_worker_client_timeout(void *context) +{ + struct auth_worker_client *client = context; + + if (client->last_request + AUTH_WORKER_MAX_IDLE <= ioloop_time) + auth_worker_client_destroy(client); +} + struct auth_worker_client * auth_worker_client_create(struct auth *auth, int fd) { @@ -356,6 +372,9 @@ o_stream_set_flush_callback(client->output, auth_worker_output, client); client->io = io_add(fd, IO_READ, auth_worker_input, client); + client->last_request = ioloop_time; + client->to = timeout_add(1000*60, auth_worker_client_timeout, client); + return client; } @@ -364,6 +383,8 @@ if (client->fd == -1) return; + timeout_remove(client->to); + i_stream_close(client->input); o_stream_close(client->output);