]> xenbits.xensource.com Git - libvirt.git/commitdiff
Fix emission of domain events messages
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 30 Sep 2009 13:33:05 +0000 (14:33 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Fri, 2 Oct 2009 11:02:35 +0000 (12:02 +0100)
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

index 5369d0a8ae5f29d508f16f206b27e966d5ff7afb..6a7790e7120a35833fcfdfc37f355c3c43b09395 100644 (file)
@@ -4745,17 +4745,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;