On Wed, Jun 10, 2015 at 04:59:51PM +0800, Fam Zheng wrote: > Signed-off-by: Fam Zheng <f...@redhat.com> > --- > main-loop.c | 4 ++-- > slirp/libslirp.h | 4 ++-- > slirp/slirp.c | 4 ++-- > stubs/slirp.c | 4 ++-- > 4 files changed, 8 insertions(+), 8 deletions(-) > > diff --git a/main-loop.c b/main-loop.c > index 18b7508..b3808ae 100644 > --- a/main-loop.c > +++ b/main-loop.c > @@ -478,7 +478,7 @@ int main_loop_wait(int nonblocking) > g_array_set_size(gpollfds, 0); /* reset for new iteration */ > /* XXX: separate device handlers from system ones */ > #ifdef CONFIG_SLIRP > - slirp_pollfds_fill(gpollfds, &timeout); > + slirp_poll_prepare(&timeout); > #endif > > if (timeout == UINT32_MAX) { > @@ -493,7 +493,7 @@ int main_loop_wait(int nonblocking) > > ret = os_host_main_loop_wait(timeout_ns); > #ifdef CONFIG_SLIRP > - slirp_pollfds_poll(gpollfds, (ret < 0)); > + slirp_poll();
The final step is to remove slirp calls completely from main_loop_wait(). slirp should use the qemu_set_fd_handler() and timer APIs directly instead of requiring callbacks around ppoll(). That would probably even make the slirp code simpler since it currently splits evented I/O into two phases: 1. Set slirp-internal state 2. Reflect slirp-internal state into iohandler and check timeouts after ppoll() If slirp calls the appropriate qemu_set_fd_handler() and timer APIs *during* state transitions it won't have to use the two-step approach. Stefan
pgpMVYHnU7wmV.pgp
Description: PGP signature