chSocketRecv fn can be used by operations such as restore, which cannot
have a specific poll timeout. The runtime of these operations at server
side (vmm) cannot be determined or capped as it depends on the guest
configuration. Hence, add a new parameter 'use_timeout' which when set
will pass -1 as timeout to poll, otherwise the default PKT_TIMEOUT_MS is
used.
Signed-off-by: Purna Pavan Chandra <paekkaladevi(a)linux.microsoft.com>
---
src/ch/ch_process.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/ch/ch_process.c b/src/ch/ch_process.c
index 1943c4381b..851ab7545c 100644
--- a/src/ch/ch_process.c
+++ b/src/ch/ch_process.c
@@ -534,11 +534,12 @@ chMonitorSocketConnect(virCHMonitor *mon)
#define PKT_TIMEOUT_MS 500 /* ms */
static char *
-chSocketRecv(int sock)
+chSocketRecv(int sock, bool use_timeout)
{
struct pollfd pfds[1];
char *buf = NULL;
size_t buf_len = 1024;
+ int timeout = PKT_TIMEOUT_MS;
int ret;
buf = g_new0(char, buf_len);
@@ -546,8 +547,11 @@ chSocketRecv(int sock)
pfds[0].fd = sock;
pfds[0].events = POLLIN;
+ if (!use_timeout)
+ timeout = -1;
+
do {
- ret = poll(pfds, G_N_ELEMENTS(pfds), PKT_TIMEOUT_MS);
+ ret = poll(pfds, G_N_ELEMENTS(pfds), timeout);
} while (ret < 0 && errno == EINTR);
if (ret <= 0) {
@@ -574,12 +578,12 @@ chSocketRecv(int sock)
#undef PKT_TIMEOUT_MS
static int
-chSocketProcessHttpResponse(int sock)
+chSocketProcessHttpResponse(int sock, bool use_poll_timeout)
{
g_autofree char *response = NULL;
int http_res;
- response = chSocketRecv(sock);
+ response = chSocketRecv(sock, use_poll_timeout);
if (response == NULL) {
return -1;
}
@@ -705,7 +709,7 @@ chProcessAddNetworkDevices(virCHDriver *driver,
return -1;
}
- if (chSocketProcessHttpResponse(mon_sockfd) < 0)
+ if (chSocketProcessHttpResponse(mon_sockfd, true) < 0)
return -1;
}
--
2.34.1