mirror of https://gitee.com/openkylin/libvirt.git
Fix emission of domain events messages
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
This commit is contained in:
parent
96ad9ed33b
commit
398d01b8a9
|
@ -4745,17 +4745,19 @@ remoteDispatchDomainEventSend (struct qemud_client *client,
|
||||||
|
|
||||||
/* Serialise the return header and event. */
|
/* Serialise the return header and event. */
|
||||||
xdrmem_create (&xdr,
|
xdrmem_create (&xdr,
|
||||||
msg->buffer + msg->bufferOffset,
|
msg->buffer,
|
||||||
msg->bufferLength - msg->bufferOffset,
|
msg->bufferLength,
|
||||||
XDR_ENCODE);
|
XDR_ENCODE);
|
||||||
|
|
||||||
|
/* 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))
|
if (!xdr_remote_domain_event_msg(&xdr, data))
|
||||||
goto xdr_error;
|
goto xdr_error;
|
||||||
|
|
||||||
|
/* Update length word to include payload*/
|
||||||
/* Update length word */
|
len = msg->bufferOffset = xdr_getpos (&xdr);
|
||||||
msg->bufferOffset += xdr_getpos (&xdr);
|
|
||||||
len = msg->bufferOffset;
|
|
||||||
if (xdr_setpos (&xdr, 0) == 0)
|
if (xdr_setpos (&xdr, 0) == 0)
|
||||||
goto xdr_error;
|
goto xdr_error;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue