[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC PATCH v2 2/4] net: resolve race of tap backend and
From: |
Stefan Hajnoczi |
Subject: |
Re: [Qemu-devel] [RFC PATCH v2 2/4] net: resolve race of tap backend and its peer |
Date: |
Thu, 28 Mar 2013 15:34:53 +0100 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
On Thu, Mar 28, 2013 at 03:55:53PM +0800, Liu Ping Fan wrote:
> From: Liu Ping Fan <address@hidden>
>
> Signed-off-by: Liu Ping Fan <address@hidden>
> ---
> net/tap.c | 7 ++++++-
> 1 files changed, 6 insertions(+), 1 deletions(-)
>
> diff --git a/net/tap.c b/net/tap.c
> index 0b663d1..401161c 100644
> --- a/net/tap.c
> +++ b/net/tap.c
> @@ -321,9 +321,14 @@ static void tap_cleanup(NetClientState *nc)
> static void tap_poll(NetClientState *nc, bool enable)
> {
> TAPState *s = DO_UPCAST(TAPState, nc, nc);
> - /* fixme, when tap backend on another thread, the disable should be sync
> */
> +
> tap_read_poll(s, enable);
> tap_write_poll(s, enable);
> +
> + if (!enable) {
> + /* need sync so vhost can take over polling */
> + g_source_remove_poll(&nc->nsrc->source, &nc->nsrc->gfd);
> + }
Is this necessary?
Since we're in tap_poll() we are currently not in poll(2) waiting on the
fd. Therefore it's safe for the caller to use the fd, the prepare
function will remove it from the fd set before glib calls poll(2) again.
Stefan
- [Qemu-devel] [RFC PATCH v2 0/4] port network layer onto glib, Liu Ping Fan, 2013/03/28
- [Qemu-devel] [RFC PATCH v2 3/4] net: port hub onto glib, Liu Ping Fan, 2013/03/28
- [Qemu-devel] [RFC PATCH v2 4/4] net: port virtio net onto glib, Liu Ping Fan, 2013/03/28
- Re: [Qemu-devel] [RFC PATCH v2 0/4] port network layer onto glib, Paolo Bonzini, 2013/03/28
- Re: [Qemu-devel] [RFC PATCH v2 0/4] port network layer onto glib, Stefan Hajnoczi, 2013/03/28