21.02.2020 10:38, Markus Armbruster wrote:
Vladimir Sementsov-Ogievskiy <[email protected]> writes:

Add functions to clean Error **errp: call corresponding Error *err
cleaning function an set pointer to NULL.

New functions:
   error_free_errp
   error_report_errp
   warn_report_errp

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Reviewed-by: Greg Kurz <[email protected]>
Reviewed-by: Eric Blake <[email protected]>
---

CC: Eric Blake <[email protected]>
CC: Kevin Wolf <[email protected]>
CC: Max Reitz <[email protected]>
CC: Greg Kurz <[email protected]>
CC: Stefano Stabellini <[email protected]>
CC: Anthony Perard <[email protected]>
CC: Paul Durrant <[email protected]>
CC: Stefan Hajnoczi <[email protected]>
CC: "Philippe Mathieu-Daudé" <[email protected]>
CC: Laszlo Ersek <[email protected]>
CC: Gerd Hoffmann <[email protected]>
CC: Stefan Berger <[email protected]>
CC: Markus Armbruster <[email protected]>
CC: Michael Roth <[email protected]>
CC: [email protected]
CC: [email protected]

  include/qapi/error.h | 26 ++++++++++++++++++++++++++
  1 file changed, 26 insertions(+)

diff --git a/include/qapi/error.h b/include/qapi/error.h
index ad5b6e896d..d34987148d 100644
--- a/include/qapi/error.h
+++ b/include/qapi/error.h
@@ -309,6 +309,32 @@ void warn_reportf_err(Error *err, const char *fmt, ...)
  void error_reportf_err(Error *err, const char *fmt, ...)
      GCC_FMT_ATTR(2, 3);
+/*
+ * Functions to clean Error **errp: call corresponding Error *err cleaning
+ * function, then set pointer to NULL.
+ */
+static inline void error_free_errp(Error **errp)
+{
+    assert(errp && *errp);
+    error_free(*errp);
+    *errp = NULL;
+}
+
+static inline void error_report_errp(Error **errp)
+{
+    assert(errp && *errp);
+    error_report_err(*errp);
+    *errp = NULL;
+}
+
+static inline void warn_report_errp(Error **errp)
+{
+    assert(errp && *errp);
+    warn_report_err(*errp);
+    *errp = NULL;
+}
+
+
  /*
   * Just like error_setg(), except you get to specify the error class.
   * Note: use of error classes other than ERROR_CLASS_GENERIC_ERROR is

These appear to be unused apart from the Coccinelle script in PATCH 03.

They are used in the full "[RFC v5 000/126] error: auto propagated
local_err" series.  Options:

1. Pick a few more patches into this part I series, so these guys come
    with users.

It needs some additional effort for this series.. But it's possible. Still,
I think that we at least should not pull out patches which should be in
future series (for example from ppc or block/)..

Grepping through v5:
 for x in {warn_report_errp,error_report_errp,error_free_errp}; do echo == $x 
==; git grep -l $x | grep -v coccinelle | grep -v 'error\.h'; echo; done
== warn_report_errp ==
block/file-posix.c
hw/ppc/spapr.c
hw/ppc/spapr_caps.c
hw/ppc/spapr_irq.c
hw/vfio/pci.c
net/tap.c
qom/object.c

== error_report_errp ==
hw/block/vhost-user-blk.c
util/oslib-posix.c

== error_free_errp ==
block.c
block/qapi.c
block/sheepdog.c
block/snapshot.c
blockdev.c
chardev/char-socket.c
hw/audio/intel-hda.c
hw/core/qdev-properties.c
hw/pci-bridge/pci_bridge_dev.c
hw/pci-bridge/pcie_pci_bridge.c
hw/scsi/megasas.c
hw/scsi/mptsas.c
hw/usb/hcd-xhci.c
io/net-listener.c
migration/colo.c
qga/commands-posix.c
qga/commands-win32.c
util/qemu-sockets.c

What do you want to add?


2. Punt this patch to the first part that has users, along with the
    part of the Coccinelle script that deals with them.

But coccinelle script would be wrong, if we drop this part from it. I think,
that after commit which adds coccinelle script, it should work with any file,
not only subset of these series.

So, it's probably OK for now to drop these functions, forcing their addition if
coccinelle script will be applied where these functions are needed. We can, for
example comment these three functions.

Splitting coccinelle script into two parts, which will be in different series 
will
not help any patch-porting processes.

Moreover, this will create dependencies between future series updating other 
files.

So, I don't like [2.]..


3. Do nothing: accept the functions without users.

OK for me)


I habitually dislike 3., but reviewing the rest of this series might
make me override that dislike.


----------------

same grep with maintainers:
 for x in {warn_report_errp,error_report_errp,error_free_errp}; do echo == $x 
==; git grep -l $x | grep -v coccinelle | grep -v 'error\.h' | while read f; do 
echo $f; ./scripts/get_maintainer.pl -f --no-rolestats $f | grep -v 
'qemu-block\|qemu-devel' | sed -e 's/^/   /'; done; echo; done
== warn_report_errp ==
block/file-posix.c
   Kevin Wolf <[email protected]>
   Max Reitz <[email protected]>
hw/ppc/spapr.c
   David Gibson <[email protected]>
   [email protected]
hw/ppc/spapr_caps.c
   David Gibson <[email protected]>
   [email protected]
hw/ppc/spapr_irq.c
   David Gibson <[email protected]>
   [email protected]
hw/vfio/pci.c
   Alex Williamson <[email protected]>
net/tap.c
   Jason Wang <[email protected]>
qom/object.c
   Paolo Bonzini <[email protected]>
   "Daniel P. Berrangé" <[email protected]>
   Eduardo Habkost <[email protected]>

== error_report_errp ==
hw/block/vhost-user-blk.c
   "Michael S. Tsirkin" <[email protected]>
   Kevin Wolf <[email protected]>
   Max Reitz <[email protected]>
util/oslib-posix.c
   Paolo Bonzini <[email protected]>

== error_free_errp ==
block.c
   Kevin Wolf <[email protected]>
   Max Reitz <[email protected]>
block/qapi.c
   Markus Armbruster <[email protected]>
   Kevin Wolf <[email protected]>
   Max Reitz <[email protected]>
block/sheepdog.c
   Liu Yuan <[email protected]>
   Kevin Wolf <[email protected]>
   Max Reitz <[email protected]>
   [email protected]
block/snapshot.c
   Kevin Wolf <[email protected]>
   Max Reitz <[email protected]>
blockdev.c
   Markus Armbruster <[email protected]>
   Kevin Wolf <[email protected]>
   Max Reitz <[email protected]>
chardev/char-socket.c
   "Marc-André Lureau" <[email protected]>
   Paolo Bonzini <[email protected]>
hw/audio/intel-hda.c
   Gerd Hoffmann <[email protected]>
hw/core/qdev-properties.c
   Paolo Bonzini <[email protected]>
   "Daniel P. Berrangé" <[email protected]>
   Eduardo Habkost <[email protected]>
hw/pci-bridge/pci_bridge_dev.c
   "Michael S. Tsirkin" <[email protected]>
   Marcel Apfelbaum <[email protected]>
hw/pci-bridge/pcie_pci_bridge.c
   "Michael S. Tsirkin" <[email protected]>
   Marcel Apfelbaum <[email protected]>
hw/scsi/megasas.c
   Hannes Reinecke <[email protected]>
   Paolo Bonzini <[email protected]>
   Fam Zheng <[email protected]>
hw/scsi/mptsas.c
   Paolo Bonzini <[email protected]>
   Fam Zheng <[email protected]>
hw/usb/hcd-xhci.c
   Gerd Hoffmann <[email protected]>
io/net-listener.c
   "Daniel P. Berrangé" <[email protected]>
migration/colo.c
   Hailiang Zhang <[email protected]>
   Juan Quintela <[email protected]>
   "Dr. David Alan Gilbert" <[email protected]>
qga/commands-posix.c
   Michael Roth <[email protected]>
qga/commands-win32.c
   Michael Roth <[email protected]>
util/qemu-sockets.c
   "Daniel P. Berrangé" <[email protected]>
   Gerd Hoffmann <[email protected]>



--
Best regards,
Vladimir

Reply via email to