Commit 36bfb66b authored by Rusty Russell's avatar Rusty Russell

io: update for new timer API.

Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent a9d42b8d
......@@ -7,6 +7,7 @@
#include <unistd.h>
struct timers;
struct timer;
struct list_head;
/**
......@@ -629,16 +630,16 @@ struct io_plan *io_close_cb(struct io_conn *, void *unused);
/**
* io_loop - process fds until all closed on io_break.
* @timers - timers which are waiting to go off (or NULL for none)
* @expired - a list filled with expired timers (can be NULL if @timers is)
* @expired - an expired timer (can be NULL if @timers is)
*
* This is the core loop; it exits with the io_break() arg, or NULL if
* all connections and listeners are closed, or with @expired set to a
* list of expired timers (if @timers isn't NULL).
* all connections and listeners are closed, or with @expired set to an
* expired timer (if @timers isn't NULL).
*
* Example:
* io_loop(NULL, NULL);
*/
void *io_loop(struct timers *timers, struct list_head *expired);
void *io_loop(struct timers *timers, struct timer **expired);
/**
* io_conn_fd - get the fd from a connection.
......
......@@ -222,16 +222,16 @@ static bool handle_always(void)
}
/* This is the main loop. */
void *io_loop(struct timers *timers, struct list_head *expired)
void *io_loop(struct timers *timers, struct timer **expired)
{
void *ret;
/* if timers is NULL, expired must be. If not, not. */
assert(!timers == !expired);
/* Make sure this is empty if we exit for some other reason. */
/* Make sure this is NULL if we exit for some other reason. */
if (expired)
list_head_init(expired);
*expired = NULL;
while (!io_loop_return) {
int i, r, ms_timeout = -1;
......@@ -259,8 +259,8 @@ void *io_loop(struct timers *timers, struct list_head *expired)
now = time_now();
/* Call functions for expired timers. */
timers_expire(timers, now, expired);
if (!list_empty(expired))
*expired = timers_expire(timers, now);
if (*expired)
break;
/* Now figure out how long to wait for the next one. */
......
......@@ -90,7 +90,7 @@ int main(void)
struct data *d = malloc(sizeof(*d));
struct addrinfo *addrinfo;
struct io_listener *l;
struct list_head expired;
struct timer *expired;
int fd, status;
/* This is how many tests you plan to run */
......@@ -98,6 +98,7 @@ int main(void)
d->state = 0;
d->timeout_usec = 100000;
timers_init(&d->timers, time_now());
timer_init(&d->timer);
fd = make_listen_fd(PORT, &addrinfo);
ok1(fd >= 0);
l = io_new_listener(NULL, fd, init_conn, d);
......@@ -129,15 +130,15 @@ int main(void)
ok1(io_loop(&d->timers, &expired) == NULL);
/* One element, d->timer. */
ok1(list_pop(&expired, struct timer, list) == &d->timer);
ok1(list_empty(&expired));
ok1(expired == &d->timer);
ok1(!timers_expire(&d->timers, time_now()));
ok1(d->state == 1);
io_close(d->conn);
/* Finished will be called, d will be returned */
ok1(io_loop(&d->timers, &expired) == d);
ok1(list_empty(&expired));
ok1(expired == NULL);
ok1(d->state == 2);
/* It should have died. */
......@@ -174,7 +175,7 @@ int main(void)
}
ok1(io_loop(&d->timers, &expired) == d);
ok1(d->state == 3);
ok1(list_empty(&expired));
ok1(expired == NULL);
ok1(wait(&status));
ok1(WIFEXITED(status));
ok1(WEXITSTATUS(status) >= sizeof(d->buf));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment