提交 4e511fcc 编写于 作者: J Jiri Denemark

rpc: Really send non-blocking calls while waiting for another call

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.
上级 2d0fc93f
......@@ -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) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册