mirror of https://gitee.com/openkylin/libvirt.git
client rpc: Send keepalive requests from IO event loop
In addition to keepalive responses, we also need to send keepalive requests from client IO loop to properly detect dead connection in case a libvirt API is called from the main loop, which prevents any timers to be called.
This commit is contained in:
parent
d9ad416698
commit
4d971dc7ef
|
@ -1284,6 +1284,7 @@ static int virNetClientIOEventLoop(virNetClientPtr client,
|
||||||
char ignore;
|
char ignore;
|
||||||
sigset_t oldmask, blockedsigs;
|
sigset_t oldmask, blockedsigs;
|
||||||
int timeout = -1;
|
int timeout = -1;
|
||||||
|
virNetMessagePtr msg = NULL;
|
||||||
|
|
||||||
/* If we have existing SASL decoded data we don't want to sleep in
|
/* If we have existing SASL decoded data we don't want to sleep in
|
||||||
* the poll(), just check if any other FDs are also ready.
|
* the poll(), just check if any other FDs are also ready.
|
||||||
|
@ -1297,6 +1298,10 @@ static int virNetClientIOEventLoop(virNetClientPtr client,
|
||||||
if (thiscall->nonBlock)
|
if (thiscall->nonBlock)
|
||||||
timeout = 0;
|
timeout = 0;
|
||||||
|
|
||||||
|
/* Limit timeout so that we can send keepalive request in time */
|
||||||
|
if (timeout == -1)
|
||||||
|
timeout = virKeepAliveTimeout(client->keepalive);
|
||||||
|
|
||||||
fds[0].events = fds[0].revents = 0;
|
fds[0].events = fds[0].revents = 0;
|
||||||
fds[1].events = fds[1].revents = 0;
|
fds[1].events = fds[1].revents = 0;
|
||||||
|
|
||||||
|
@ -1342,6 +1347,13 @@ static int virNetClientIOEventLoop(virNetClientPtr client,
|
||||||
|
|
||||||
virNetClientLock(client);
|
virNetClientLock(client);
|
||||||
|
|
||||||
|
if (virKeepAliveTrigger(client->keepalive, &msg)) {
|
||||||
|
client->wantClose = true;
|
||||||
|
} else if (msg && virNetClientQueueNonBlocking(client, msg) < 0) {
|
||||||
|
VIR_WARN("Could not queue keepalive request");
|
||||||
|
virNetMessageFree(msg);
|
||||||
|
}
|
||||||
|
|
||||||
/* If we have existing SASL decoded data, pretend
|
/* If we have existing SASL decoded data, pretend
|
||||||
* the socket became readable so we consume it
|
* the socket became readable so we consume it
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue