virCopyLastError is intended to be used after last error is set. However due to virLastErrorObject failures (very unlikely through as thread local error is allocated on first use) we can have zero fields in a copy as a result. In particular code field can be set to VIR_ERR_OK. In some places (qemu monitor, qemu agent and qemu migaration code for example) we use copy result as a flag and this leads to bugs. Let's set copy result to generic error ("cause unknown") in this case. Approach is based on John Ferlan comments in [1] and [2] to initial attempt which fixes issue in much less generic way. [1] https://www.redhat.com/archives/libvir-list/2018-April/msg02700.html [2] https://www.redhat.com/archives/libvir-list/2018-May/msg00124.html --- src/util/virerror.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/virerror.c b/src/util/virerror.c index c000b00..9f158af 100644 --- a/src/util/virerror.c +++ b/src/util/virerror.c @@ -343,7 +343,7 @@ virCopyLastError(virErrorPtr to) if (err) virCopyError(err, to); else - virResetError(to); + virErrorGenericFailure(err); return to->code; } -- 1.8.3.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list