The code which updated the message length after writing the payload wrote the updated length word in the wrong place since the XDR object was given a buffer pointing to the start of the header payload, rather than message start. * daemon/remote.c: Fix updating of event message length so that we actually send the payload, not just the header --- daemon/remote.c | 14 ++++++++------ 1 files changed, 8 insertions(+), 6 deletions(-) diff --git a/daemon/remote.c b/daemon/remote.c index 6d4cc1c..2b58045 100644 --- a/daemon/remote.c +++ b/daemon/remote.c @@ -4559,17 +4559,19 @@ remoteDispatchDomainEventSend (struct qemud_client *client, /* Serialise the return header and event. */ xdrmem_create (&xdr, - msg->buffer + msg->bufferOffset, - msg->bufferLength - msg->bufferOffset, + msg->buffer, + msg->bufferLength, XDR_ENCODE); - if (!xdr_remote_domain_event_msg(&xdr, data)) + /* Skip over the header we just wrote */ + if (xdr_setpos (&xdr, msg->bufferOffset) == 0) goto xdr_error; + if (!xdr_remote_domain_event_msg(&xdr, data)) + goto xdr_error; - /* Update length word */ - msg->bufferOffset += xdr_getpos (&xdr); - len = msg->bufferOffset; + /* Update length word to include payload*/ + len = msg->bufferOffset = xdr_getpos (&xdr); if (xdr_setpos (&xdr, 0) == 0) goto xdr_error; -- 1.6.2.5 -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list