[libvirt] [PATCH 0/4] Make it easier to clean up after using virBuffer
John Ferlan
jferlan at redhat.com
Wed Aug 23 16:56:02 UTC 2017
On 08/21/2017 03:47 AM, Martin Kletzander wrote:
> There are many places in the code where virBufferCheckError() is used
> and then, right after that, virBufferContentAndReset() is called. The
> former has ATTRIBUTE_RETURN_CHECK, so every occurrence just checks
> that. However, if the return value of the latter is also the return
> value of the current function, there is no need to duplicate the work
> and act upon the error twice.
If code doesn't really care or need to check the error, then it's
unnecessary...
>
> This series proposes the idea of virCheckError being used for only
> reporting the error [1/4] and shows an example commit on how to clean
> up existing functions [2/4] so that it can be posted to our wiki under
> https://wiki.libvirt.org/page/BiteSizedTasks and linked from there.>
> Further enhancements could go a step further and create one function
> (actually a macro the same way CheckError is done) and wrap those two
> lines in one so that it is even shorter. This, however, is not meant
> to be part of this series.
>
> Patches [3/4] and [4/4] utilize this for miscellaneous clean-ups in
> src/conf/.
>
>
> Martin Kletzander (4):
> util: Umark virBufferCheckErrorInternal as ATTRIBUTE_RETURN_CHECK
Consider $subj as:
util: Remove ATTRIBUTE_RETURN_CHECK from virBufferCheckErrorInternal
but see my Coverity note below first...
> util: Use virBufferCheckError to its full potential.
> conf: Clean up and report error in virDomainCapsFormat
> conf: Clean up and report error in virDomainGenerateMachineName
>
> src/conf/domain_capabilities.c | 68 +++++++++++++++++-------------------------
> src/conf/domain_conf.c | 16 +++++-----
> src/util/virbitmap.c | 6 +---
> src/util/virbuffer.h | 2 +-
> 4 files changed, 37 insertions(+), 55 deletions(-)
>
> --
> 2.14.1
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
>
While what you have works just fine - it causes new Coverity warnings
regarding the fact that 209 of 212 places check for error, but the 3 new
callers don't.
As an alternative, why not add and use:
/**
* virBufferReportError
*
* Similar to above, but wraps inside an ignore_value for paths that
* don't need to check the return status.
*/
# define virBufferReportError(buf) \
ignore_value(virBufferCheckErrorInternal(buf, VIR_FROM_THIS, \
__FILE__, __FUNCTION__, __LINE__))
Instead of dropping the ATTRIBUTE_RETURN_CHECK
IDC either way - less places for me to add ignore_value() wrapper ;-)
Whichever way you decide is fine by me though, so
Reviewed-by: John Ferlan <jferlan at redhat.com> (series)
John
More information about the libvir-list
mailing list