]> xenbits.xensource.com Git - libvirt.git/commitdiff
remote: Serialize typed parameters earlier
authorPeter Krempa <pkrempa@redhat.com>
Tue, 22 Oct 2019 12:57:55 +0000 (14:57 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Thu, 24 Oct 2019 17:35:34 +0000 (19:35 +0200)
Move calls to virTypedParamsSerialize earlier in the event dispatch
functions so that we don't have to call 'xdr_free' afterwards.

This is possible as virTypedParamsSerialize cleans up after itself if it
fails.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
ACKed-by: Eric Blake <eblake@redhat.com>
src/remote/remote_daemon_dispatch.c

index 63f7496fb9d5277872a6d0a7069d3febabdff348..be20556128ae4eba57c0ea9f36ec5d439c0953f2 100644 (file)
@@ -1033,16 +1033,17 @@ remoteRelayDomainEventTunable(virConnectPtr conn,
 
     /* build return data */
     memset(&data, 0, sizeof(data));
-    data.callbackID = callback->callbackID;
-    make_nonnull_domain(&data.dom, dom);
 
     if (virTypedParamsSerialize(params, nparams,
                                 REMOTE_DOMAIN_EVENT_TUNABLE_MAX,
                                 (virTypedParameterRemotePtr *) &data.params.params_val,
                                 &data.params.params_len,
-                                VIR_TYPED_PARAM_STRING_OKAY) < 0) {
-        goto error;
-    }
+                                VIR_TYPED_PARAM_STRING_OKAY) < 0)
+        return -1;
+
+    data.callbackID = callback->callbackID;
+    make_nonnull_domain(&data.dom, dom);
+
 
     remoteDispatchObjectEventSend(callback->client, remoteProgram,
                                   REMOTE_PROC_DOMAIN_EVENT_CALLBACK_TUNABLE,
@@ -1050,11 +1051,6 @@ remoteRelayDomainEventTunable(virConnectPtr conn,
                                   &data);
 
     return 0;
-
- error:
-    xdr_free((xdrproc_t)xdr_remote_domain_event_callback_tunable_msg,
-             (char *) &data);
-    return -1;
 }
 
 
@@ -1177,27 +1173,22 @@ remoteRelayDomainEventJobCompleted(virConnectPtr conn,
 
     /* build return data */
     memset(&data, 0, sizeof(data));
-    data.callbackID = callback->callbackID;
-    make_nonnull_domain(&data.dom, dom);
 
     if (virTypedParamsSerialize(params, nparams,
                                 REMOTE_DOMAIN_JOB_STATS_MAX,
                                 (virTypedParameterRemotePtr *) &data.params.params_val,
                                 &data.params.params_len,
-                                VIR_TYPED_PARAM_STRING_OKAY) < 0) {
-        goto error;
-    }
+                                VIR_TYPED_PARAM_STRING_OKAY) < 0)
+        return -1;
+
+    data.callbackID = callback->callbackID;
+    make_nonnull_domain(&data.dom, dom);
 
     remoteDispatchObjectEventSend(callback->client, remoteProgram,
                                   REMOTE_PROC_DOMAIN_EVENT_CALLBACK_JOB_COMPLETED,
                                   (xdrproc_t)xdr_remote_domain_event_callback_job_completed_msg,
                                   &data);
     return 0;
-
- error:
-    xdr_free((xdrproc_t)xdr_remote_domain_event_callback_job_completed_msg,
-             (char *) &data);
-    return -1;
 }