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 @@ ...@@ -7,6 +7,7 @@
#include <unistd.h> #include <unistd.h>
struct timers; struct timers;
struct timer;
struct list_head; struct list_head;
/** /**
...@@ -629,16 +630,16 @@ struct io_plan *io_close_cb(struct io_conn *, void *unused); ...@@ -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. * io_loop - process fds until all closed on io_break.
* @timers - timers which are waiting to go off (or NULL for none) * @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 * 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 * all connections and listeners are closed, or with @expired set to an
* list of expired timers (if @timers isn't NULL). * expired timer (if @timers isn't NULL).
* *
* Example: * Example:
* io_loop(NULL, NULL); * 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. * io_conn_fd - get the fd from a connection.
......
...@@ -222,16 +222,16 @@ static bool handle_always(void) ...@@ -222,16 +222,16 @@ static bool handle_always(void)
} }
/* This is the main loop. */ /* 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; void *ret;
/* if timers is NULL, expired must be. If not, not. */ /* if timers is NULL, expired must be. If not, not. */
assert(!timers == !expired); 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) if (expired)
list_head_init(expired); *expired = NULL;
while (!io_loop_return) { while (!io_loop_return) {
int i, r, ms_timeout = -1; int i, r, ms_timeout = -1;
...@@ -259,8 +259,8 @@ void *io_loop(struct timers *timers, struct list_head *expired) ...@@ -259,8 +259,8 @@ void *io_loop(struct timers *timers, struct list_head *expired)
now = time_now(); now = time_now();
/* Call functions for expired timers. */ /* Call functions for expired timers. */
timers_expire(timers, now, expired); *expired = timers_expire(timers, now);
if (!list_empty(expired)) if (*expired)
break; break;
/* Now figure out how long to wait for the next one. */ /* Now figure out how long to wait for the next one. */
......
...@@ -90,7 +90,7 @@ int main(void) ...@@ -90,7 +90,7 @@ int main(void)
struct data *d = malloc(sizeof(*d)); struct data *d = malloc(sizeof(*d));
struct addrinfo *addrinfo; struct addrinfo *addrinfo;
struct io_listener *l; struct io_listener *l;
struct list_head expired; struct timer *expired;
int fd, status; int fd, status;
/* This is how many tests you plan to run */ /* This is how many tests you plan to run */
...@@ -98,6 +98,7 @@ int main(void) ...@@ -98,6 +98,7 @@ int main(void)
d->state = 0; d->state = 0;
d->timeout_usec = 100000; d->timeout_usec = 100000;
timers_init(&d->timers, time_now()); timers_init(&d->timers, time_now());
timer_init(&d->timer);
fd = make_listen_fd(PORT, &addrinfo); fd = make_listen_fd(PORT, &addrinfo);
ok1(fd >= 0); ok1(fd >= 0);
l = io_new_listener(NULL, fd, init_conn, d); l = io_new_listener(NULL, fd, init_conn, d);
...@@ -129,15 +130,15 @@ int main(void) ...@@ -129,15 +130,15 @@ int main(void)
ok1(io_loop(&d->timers, &expired) == NULL); ok1(io_loop(&d->timers, &expired) == NULL);
/* One element, d->timer. */ /* One element, d->timer. */
ok1(list_pop(&expired, struct timer, list) == &d->timer); ok1(expired == &d->timer);
ok1(list_empty(&expired)); ok1(!timers_expire(&d->timers, time_now()));
ok1(d->state == 1); ok1(d->state == 1);
io_close(d->conn); io_close(d->conn);
/* Finished will be called, d will be returned */ /* Finished will be called, d will be returned */
ok1(io_loop(&d->timers, &expired) == d); ok1(io_loop(&d->timers, &expired) == d);
ok1(list_empty(&expired)); ok1(expired == NULL);
ok1(d->state == 2); ok1(d->state == 2);
/* It should have died. */ /* It should have died. */
...@@ -174,7 +175,7 @@ int main(void) ...@@ -174,7 +175,7 @@ int main(void)
} }
ok1(io_loop(&d->timers, &expired) == d); ok1(io_loop(&d->timers, &expired) == d);
ok1(d->state == 3); ok1(d->state == 3);
ok1(list_empty(&expired)); ok1(expired == NULL);
ok1(wait(&status)); ok1(wait(&status));
ok1(WIFEXITED(status)); ok1(WIFEXITED(status));
ok1(WEXITSTATUS(status) >= sizeof(d->buf)); 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