On Mon, Nov 28, 2011 at 17:53:36 +0000, Daniel P. Berrange wrote: > On Mon, Nov 28, 2011 at 06:23:14PM +0100, Jiri Denemark wrote: > > When another thread was dispatching while we wanted to send a > > non-blocking call, we correctly queued the call and woke up the thread > > but the thread just threw the call away since it forgot to recheck if > > its socket was writable. > > --- > > src/rpc/virnetclient.c | 10 ++++++++++ > > 1 files changed, 10 insertions(+), 0 deletions(-) > > > > diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c > > index aad7f5d..a738129 100644 > > --- a/src/rpc/virnetclient.c > > +++ b/src/rpc/virnetclient.c > > @@ -1381,6 +1381,16 @@ static int virNetClientIOEventLoop(virNetClientPtr client, > > _("read on wakeup fd failed")); > > goto error; > > } > > + > > + /* If we were woken up because a new non-blocking call was queued, > > + * we need to re-poll to check if we can send it. > > + */ > > + if (virNetClientCallMatchPredicate(client->waitDispatch, > > + virNetClientIOEventLoopWantNonBlock, > > + NULL)) { > > + VIR_DEBUG("New non-blocking call arrived; repolling"); > > + continue; > > + } > > } > > > > if (ret < 0) { > > ACK Pushed, thanks. Jirka -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list