From: Markus Armbruster <armbru@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Cc: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
Michael Roth <mdroth@linux.vnet.ibm.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [PATCH v4 01/31] errp: rename errp to errp_in where it is IN-argument
Date: Wed, 09 Oct 2019 20:48:42 +0200 [thread overview]
Message-ID: <87imoxzred.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: 155beb1a-b50f-4ee0-ec19-4a71f620de79@virtuozzo.com
Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> writes:
> 08.10.2019 15:05, Markus Armbruster wrote:
>> Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> writes:
>>
>>> 08.10.2019 12:08, Markus Armbruster wrote:
>>>> Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> writes:
>>>>
>>>>> Error **errp is almost always OUT-argument: it's assumed to be NULL, or
>>>>> pointer to NULL-initialized pointer, or pointer to error_abort or
>>>>> error_fatal, for callee to report error.
>>>>
>>>> Yes.
>>>>
>>>>> But very few functions instead get Error **errp as IN-argument:
>>>>> it's assumed to be set, and callee should clean it.
>>>>
>>>> What do you mean by "callee should clean"? Let's see below.
>>>>
>>>>> In such cases, rename errp to errp_in.
>>>>
>>>> I acknowledge that errp arguments that don't have the usual meaning can
>>>> be confusing.
>>>>
>>>> Naming can help, comments can help, but perhaps we can tweak the code to
>>>> avoid the problem instead. Let's see:
>>>>
>>>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>>>>> Reviewed-by: Eric Blake <eblake@redhat.com>
>> [...]
>>>> We can avoid the confusing Error **errp in all three cases by peeling
>>>> off an indirection. What do you think?
>>>>
>>>
>>> I like the idea, thanks! I think, I'll try to make a patch.
>>>
>>> But you are right, unfortunately there more cases, at least, pointed by
>>> Greg
>>>
>>> error_append_socket_sockfd_hint and
>>> error_append_security_model_hint
>>>
>>> Which don't free error..
>>
>> Neither do error_append_hint() and error_prepend().
>>
>> For anything named error_append_FOO_hint() or error_prepend_FOO(),
>> confusion seems unlikely.
>>
>>> But if they append hint, they should always be called
>>> on wrapped errp, accordingly to the problem about fatal_error, so they may
>>> be converted to Error *err too.. Hmm, I should think about the script to find
>>> such functions.
>>
>> I figure I better read more of your series before I comment on this
>> thought.
>>
>
> Me trying to find more such functions:
>
> script:
> # cat ../up-fix-error_append_hint/find.py
> #!/usr/bin/env python
> import re
> import sys
>
> ret_type = r'^[^{};#]+( |\*|\*\*)'
> name = r'(?P<name>\w+)'
> args = r'\([^{};#]*Error \*\*errp[^{};#]*\)'
> body_before_errp = r'((?<!errp)[^}]|(?<!^)})*'
>
> caller = '(if ?|assert|' \
> 'error_(v?prepend|get_pretty|append_hint|free|free_or_abort)|' \
> '(warn|error)_reportf?_err)'
>
> # Match 'caller(errp', 'caller(*errp', 'errp ?'
> access_errp = '(' + caller + r'\(\*?errp|errp \?)'
>
> r = re.compile(ret_type + name + args + '\s*^\{' + body_before_errp + access_errp, re.M)
>
> with open(sys.argv[1]) as f:
> text = f.read()
>
> for m in r.finditer(text):
> print(m.groupdict()['name'])
>
>
> search:
> # git ls-files | grep '\.\(h\|c\)$' | while read f; do ../up-fix-error_append_hint/find.py $f; done
> vmdk_co_create_opts_cb
Forwards errp to vmdk_create_extent().
Also asserts errp == NULL, which looks suspicious. Not your problem.
> error_append_security_model_hint
> error_append_socket_sockfd_hint
Convenience functions to append a canned hint with error_append_hint().
Their name makes confusion unlikely.
> qemu_file_get_error_obj
Returns an error object in an unusual way: error_copy() instead of
error_setg().
Suspicious-looking qemu_file_set_error_obj() nearby: it either stores
@err in @f, or reports it to stderr / current monitor. Not your
problem.
> hmp_handle_error
Covered by your patch, already discussed.
> qbus_list_bus
> qbus_list_dev
Convenience functions to append hints with error_append_hint().
Function names do not hint at that (pardon the pun).
> kvmppc_hint_smt_possible
Convenience function to append hints with error_append_hint(). Function
name hints weakly.
> vnc_client_io_error
Covered by your patch, already discussed.
> error_handle_fatal
> error_setv
> error_prepend
> error_setg_win32_internal
> error_free_or_abort
Let's not worry about error.c itself.
> vmdk_co_create_opts_cb and qemu_file_get_error_obj are false positives I think
Agree.
next prev parent reply other threads:[~2019-10-09 20:08 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-01 15:52 [PATCH v4 00/31] error: auto propagated local_err Vladimir Sementsov-Ogievskiy
2019-10-01 15:52 ` Vladimir Sementsov-Ogievskiy
2019-10-01 15:52 ` [PATCH v4 01/31] errp: rename errp to errp_in where it is IN-argument Vladimir Sementsov-Ogievskiy
2019-10-08 9:08 ` Markus Armbruster
2019-10-08 9:30 ` Vladimir Sementsov-Ogievskiy
2019-10-08 12:05 ` Markus Armbruster
2019-10-09 10:08 ` Vladimir Sementsov-Ogievskiy
2019-10-09 18:48 ` Markus Armbruster [this message]
2019-10-09 9:42 ` Vladimir Sementsov-Ogievskiy
2019-10-09 18:51 ` Markus Armbruster
2019-10-01 15:52 ` [PATCH v4 02/31] hw/core/loader-fit: fix freeing errp in fit_load_fdt Vladimir Sementsov-Ogievskiy
2019-10-01 16:13 ` Eric Blake
2019-10-08 14:24 ` Markus Armbruster
2019-10-01 15:52 ` [PATCH v4 03/31] net/net: fix local variable shadowing in net_client_init Vladimir Sementsov-Ogievskiy
2019-10-08 14:34 ` Markus Armbruster
2019-10-01 15:52 ` [PATCH v4 04/31] error: auto propagated local_err Vladimir Sementsov-Ogievskiy
2019-10-01 16:17 ` Eric Blake
2019-10-01 16:17 ` Eric Blake
2019-10-02 10:15 ` Roman Kagan
2019-10-02 14:00 ` Eric Blake
2019-10-08 16:03 ` Markus Armbruster
2019-10-08 16:19 ` Greg Kurz
2019-10-08 18:24 ` Markus Armbruster
2019-10-09 8:04 ` Markus Armbruster
2019-10-09 8:17 ` Vladimir Sementsov-Ogievskiy
2019-10-09 19:09 ` Markus Armbruster
2019-10-01 15:52 ` [PATCH v4 05/31] scripts: add script to fix error_append_hint/error_prepend usage Vladimir Sementsov-Ogievskiy
2019-10-01 16:22 ` Eric Blake
2019-10-01 17:01 ` Vladimir Sementsov-Ogievskiy
2019-10-01 17:01 ` Vladimir Sementsov-Ogievskiy
2019-10-01 16:50 ` Eric Blake
2019-10-01 17:08 ` Eric Blake
2019-10-01 17:08 ` Eric Blake
2019-10-01 17:15 ` Vladimir Sementsov-Ogievskiy
2019-10-01 17:15 ` Vladimir Sementsov-Ogievskiy
2019-10-01 15:52 ` [PATCH v4 06/31] python: add commit-per-subsystem.py Vladimir Sementsov-Ogievskiy
2019-10-07 15:55 ` Cornelia Huck
2019-10-07 16:10 ` Vladimir Sementsov-Ogievskiy
2019-10-07 16:16 ` Cornelia Huck
2019-10-07 16:16 ` Cornelia Huck
2019-10-07 16:21 ` Daniel P. Berrangé
2019-10-07 16:21 ` Daniel P. Berrangé
2019-10-07 17:15 ` Vladimir Sementsov-Ogievskiy
2019-10-01 15:52 ` [PATCH v4 07/31] s390: Fix error_append_hint/error_prepend usage Vladimir Sementsov-Ogievskiy
2019-10-07 15:58 ` Cornelia Huck
2019-10-09 7:42 ` Markus Armbruster
2019-10-11 15:33 ` Vladimir Sementsov-Ogievskiy
2019-10-01 15:52 ` [PATCH v4 08/31] ARM TCG CPUs: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:52 ` [PATCH v4 09/31] PowerPC " Vladimir Sementsov-Ogievskiy
2019-10-01 15:52 ` [PATCH v4 10/31] arm: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:52 ` [PATCH v4 11/31] SmartFusion2: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 12/31] ASPEED BMCs: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 13/31] Boston: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 14/31] PowerNV (Non-Virtualized): " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 15/31] PCI: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 16/31] SCSI: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 17/31] USB: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 18/31] VFIO: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 19/31] vhost: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 20/31] virtio: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 21/31] virtio-9p: " Vladimir Sementsov-Ogievskiy
2019-10-02 9:19 ` Greg Kurz
2019-10-02 12:58 ` Vladimir Sementsov-Ogievskiy
2019-10-02 13:11 ` Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 22/31] XIVE: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 23/31] block: " Vladimir Sementsov-Ogievskiy
2019-10-01 17:09 ` Eric Blake
2019-10-01 18:55 ` Vladimir Sementsov-Ogievskiy
2019-10-01 19:12 ` Vladimir Sementsov-Ogievskiy
2019-10-01 19:44 ` Eric Blake
2019-10-09 7:22 ` Markus Armbruster
2019-10-01 15:53 ` [PATCH v4 24/31] chardev: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 25/31] cmdline: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 26/31] QOM: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 27/31] Migration: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 28/31] Sockets: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 29/31] nbd: " Vladimir Sementsov-Ogievskiy
2019-10-01 17:47 ` Eric Blake
2019-10-01 15:53 ` [PATCH v4 30/31] PVRDMA: " Vladimir Sementsov-Ogievskiy
2019-10-01 15:53 ` [PATCH v4 31/31] ivshmem: " Vladimir Sementsov-Ogievskiy
2019-10-02 3:26 ` [PATCH v4 00/31] error: auto propagated local_err no-reply
2019-10-02 11:58 ` Markus Armbruster
2019-10-08 7:30 ` Markus Armbruster
2019-10-08 8:41 ` Vladimir Sementsov-Ogievskiy
2019-10-08 9:39 ` Greg Kurz
2019-10-08 10:09 ` Vladimir Sementsov-Ogievskiy
2019-10-08 11:59 ` Markus Armbruster
2019-10-09 8:45 ` Vladimir Sementsov-Ogievskiy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87imoxzred.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=dgilbert@redhat.com \
--cc=kraxel@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=vsementsov@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.