mirror of https://github.com/xemu-project/xemu.git
![]() As mentioned in previous patches, we want to call visit_end_struct() functions unconditionally, so that visitors can release resources tied up since the matching visit_start_struct() without also having to worry about error priority if more than one error occurs. Even though error_propagate() can be safely used to ignore a second error during cleanup caused by a first error, it is simpler if the cleanup cannot set an error. So, split out the error checking portion (basically, input visitors checking for unvisited keys) into a new function visit_check_struct(), which can be safely skipped if any earlier errors are encountered, and leave the cleanup portion (which never fails, but must be called unconditionally if visit_start_struct() succeeded) in visit_end_struct(). Generated code in qapi-visit.c has diffs resembling: |@@ -59,10 +59,12 @@ void visit_type_ACPIOSTInfo(Visitor *v, | goto out_obj; | } | visit_type_ACPIOSTInfo_members(v, obj, &err); |- error_propagate(errp, err); |- err = NULL; |+ if (err) { |+ goto out_obj; |+ } |+ visit_check_struct(v, &err); | out_obj: |- visit_end_struct(v, &err); |+ visit_end_struct(v); | out: and in qapi-event.c: @@ -47,7 +47,10 @@ void qapi_event_send_acpi_device_ost(ACP | goto out; | } | visit_type_q_obj_ACPI_DEVICE_OST_arg_members(v, ¶m, &err); |- visit_end_struct(v, err ? NULL : &err); |+ if (!err) { |+ visit_check_struct(v, &err); |+ } |+ visit_end_struct(v); | if (err) { | goto out; Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <1461879932-9020-20-git-send-email-eblake@redhat.com> [Conflict with a doc fixup resolved] Signed-off-by: Markus Armbruster <armbru@redhat.com> |
||
---|---|---|
.. | ||
specs | ||
aio_notify.promela | ||
aio_notify_accept.promela | ||
aio_notify_bug.promela | ||
atomics.txt | ||
bitmaps.md | ||
blkdebug.txt | ||
blkverify.txt | ||
bootindex.txt | ||
build-system.txt | ||
ccid.txt | ||
ich9-ehci-uhci.cfg | ||
image-fuzzer.txt | ||
live-block-ops.txt | ||
memory-hotplug.txt | ||
memory.txt | ||
migration.txt | ||
multi-thread-compression.txt | ||
multiple-iothreads.txt | ||
multiseat.txt | ||
pci_expander_bridge.txt | ||
q35-chipset.cfg | ||
qapi-code-gen.txt | ||
qcow2-cache.txt | ||
qdev-device-use.txt | ||
qemupciserial.inf | ||
qmp-events.txt | ||
qmp-intro.txt | ||
qmp-spec.txt | ||
rcu.txt | ||
rdma.txt | ||
replay.txt | ||
spice-port-fqdn.txt | ||
throttle.txt | ||
tracing.txt | ||
usb-storage.txt | ||
usb2.txt | ||
virtio-balloon-stats.txt | ||
virtio-migration.txt | ||
vnc-ledstate-Pseudo-encoding.txt | ||
win32-qemu-event.promela | ||
writing-qmp-commands.txt | ||
xbzrle.txt | ||
xen-save-devices-state.txt |