]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Catch stderr of image decompression binary
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 17 Jan 2013 10:42:00 +0000 (11:42 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 5 Feb 2013 14:45:21 +0000 (15:45 +0100)
If a decompression binary prints something to stderr, currently
it is discarded. However, it can contain useful data from
debugging POV, so we should catch it.

src/qemu/qemu_driver.c

index 812bf95ee85b9422ef712540dedd885caaa06cc8..b53d4125e47fdc2464e2b84d2af7e9566a9bc26d 100644 (file)
@@ -4879,6 +4879,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
     virDomainEventPtr event;
     int intermediatefd = -1;
     virCommandPtr cmd = NULL;
+    char *errbuf = NULL;
 
     if (header->version == 2) {
         const char *prog = qemuSaveCompressionTypeToString(header->compressed);
@@ -4896,6 +4897,8 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
 
             virCommandSetInputFD(cmd, intermediatefd);
             virCommandSetOutputFD(cmd, fd);
+            virCommandSetErrorBuffer(cmd, &errbuf);
+            virCommandDoAsyncIO(cmd);
 
             if (virCommandRunAsync(cmd, NULL) < 0) {
                 virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -4926,6 +4929,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
             qemuProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_FAILED, 0);
             ret = -1;
         }
+        VIR_DEBUG("Decompression binary stderr: %s", NULLSTR(errbuf));
     }
     VIR_FORCE_CLOSE(intermediatefd);
 
@@ -4975,6 +4979,7 @@ qemuDomainSaveImageStartVM(virConnectPtr conn,
 
 out:
     virCommandFree(cmd);
+    VIR_FREE(errbuf);
     if (virSecurityManagerRestoreSavedStateLabel(driver->securityManager,
                                                  vm->def, path) < 0)
         VIR_WARN("failed to restore save state label on %s", path);