Removing a 4kb stack allocation. Reduce stack buffer for virStrerror to the common 1kb instead of 4kb. --- src/qemu/qemu_process.c | 16 ++++++++++++---- 1 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 90fcea0..fc9fdae 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -1012,7 +1012,8 @@ static int qemuProcessWaitForMonitor(struct qemud_driver* driver, virDomainObjPtr vm, off_t pos) { - char buf[4096] = ""; /* Plenty of space to get startup greeting */ + char *buf; + size_t buf_size = 4096; /* Plenty of space to get startup greeting */ int logfd; int ret = -1; virHashTablePtr paths = NULL; @@ -1020,7 +1021,12 @@ qemuProcessWaitForMonitor(struct qemud_driver* driver, if ((logfd = qemuProcessLogReadFD(driver->logDir, vm->def->name, pos)) < 0) return -1; - if (qemuProcessReadLogOutput(vm, logfd, buf, sizeof(buf), + if (VIR_ALLOC_N(buf, buf_size) < 0) { + virReportOOMError(); + return -1; + } + + if (qemuProcessReadLogOutput(vm, logfd, buf, buf_size, qemuProcessFindCharDevicePTYs, "console", 30) < 0) goto closelog; @@ -1053,16 +1059,18 @@ cleanup: if (kill(vm->pid, 0) == -1 && errno == ESRCH) { /* VM is dead, any other error raised in the interim is probably * not as important as the qemu cmdline output */ - qemuProcessReadLogFD(logfd, buf, sizeof(buf), strlen(buf)); + qemuProcessReadLogFD(logfd, buf, buf_size, strlen(buf)); qemuReportError(VIR_ERR_INTERNAL_ERROR, _("process exited while connecting to monitor: %s"), buf); ret = -1; } + VIR_FREE(buf); + closelog: if (VIR_CLOSE(logfd) < 0) { - char ebuf[4096]; + char ebuf[1024]; VIR_WARN("Unable to close logfile: %s", virStrerror(errno, ebuf, sizeof ebuf)); } -- 1.7.0.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list