[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
[libvirt] [PATCH v2 4/4] Check that QEMU is still alive while reading startup output.
- From: Cole Robinson <crobinso redhat com>
- To: libvir-list redhat com
- Cc:
- Subject: [libvirt] [PATCH v2 4/4] Check that QEMU is still alive while reading startup output.
- Date: Mon, 4 May 2009 15:52:11 -0400
By checking the pid every retry period, we can quickly determine if
the process crashed at startup, rather than make the user wait for
the entire timeout (3 seconds).
Signed-off-by: Cole Robinson <crobinso redhat com>
---
src/qemu_driver.c | 33 ++++++++++++++++++++++-----------
1 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index fb4ad64..5c8a883 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -744,29 +744,40 @@ qemudReadLogOutput(virConnectPtr conn,
int timeout)
{
int retries = timeout*10;
+ int got = 0;
buf[0] = '\0';
while (retries) {
ssize_t ret;
- size_t got = 0;
+ int isdead = 0;
- while((ret = read(fd, buf+got, buflen-got-1)) > 0) {
- got += ret;
- buf[got] = '\0';
- if ((buflen-got-1) == 0) {
- qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
- _("Out of space while reading %s log output"), what);
- return -1;
- }
- }
+ if (kill(vm->pid, 0) == -1 && errno == ESRCH)
+ isdead = 1;
- if (ret < 0 && errno != EINTR) {
+ ret = saferead(fd, buf+got, buflen-got-1);
+ if (ret < 0) {
virReportSystemError(conn, errno,
_("Failure while reading %s log output"),
what);
return -1;
}
+ got += ret;
+ buf[got] = '\0';
+ if (got == buflen-1) {
+ qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+ _("Out of space while reading %s log output"),
+ what);
+ return -1;
+ }
+
+ if (isdead) {
+ qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+ _("Process exited while reading %s log output"),
+ what);
+ return -1;
+ }
+
ret = func(conn, vm, buf, fd);
if (ret <= 0)
return ret;
--
1.6.0.6
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]