[libvirt] [PATCH 5/7] Add virLogSource variables to all source files
Daniel P. Berrange
berrange at redhat.com
Mon Mar 10 10:14:29 UTC 2014
On Fri, Mar 07, 2014 at 10:43:04AM -0700, Eric Blake wrote:
> On 03/03/2014 12:18 PM, Daniel P. Berrange wrote:
> > Any source file which calls the logging APIs now needs
> > to have a VIR_LOG_INIT("source.name") declaration at
> > the start of the file. This provides a static variable
> > of the virLogSource type.
> >
> > Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> > ---
> > daemon/libvirtd-config.c | 2 ++
> > daemon/libvirtd.c | 3 +++
> > daemon/libvirtd.h | 1 -
> > daemon/remote.c | 2 ++
> > daemon/stream.c | 2 ++
> > docs/apibuild.py | 30 ++++++++++++++++++++++++++++++
>
> You know, generating the patch with git's '-Ofile' containing globs to
> float the important files first into the diff makes review a bit easier.
>
>
> > 229 files changed, 432 insertions(+), 48 deletions(-)
>
> Big, but I don't see any way to break it down.
>
> >
> > diff --git a/daemon/libvirtd-config.c b/daemon/libvirtd-config.c
> > index c816fda..c68c6f4 100644
> > --- a/daemon/libvirtd-config.c
> > +++ b/daemon/libvirtd-config.c
> > @@ -37,6 +37,8 @@
> >
> > #define VIR_FROM_THIS VIR_FROM_CONF
> >
> > +VIR_LOG_INIT("daemon.libvirtd-config");
>
> Idea for a followup patch - instead of having VIR_FROM_THIS hard-coded
> as a macro, could we instead inline it as an argument to VIR_LOG_INIT()
> which populates another member of the static struct? Then all the error
> logging functions would read it out of the struct as a single argument,
> instead of the current setup of getting an argument for both the struct
> and the VIR_FROM_THIS macro expansion as two separate arguments. If you
> respin the patch series, it might be nice to do the all-file-touching
> patch only once, rather than having to do it in two pieces.
NB there is a 1-1 mapping of VIR_LOG_INIT <-> source files, but the
same is not always true of error reporting APIs. Most will use VIR_FROM_THIS
but there are a bunch of special cases where we won't rely on that macro.
In particular in the RPC code.
> > +++ b/src/util/virlog.h
> > @@ -51,7 +51,15 @@ struct _virLogSource {
> > const char *name;
> > };
> >
> > -extern virLogSource virLogSelf;
> > +/*
> > + * verify() call is to make gcc STFU about unused
> > + * static variables
> > + */
> > +# define VIR_LOG_INIT(n) \
> > + static virLogSource virLogSelf = { \
> > + .name = "" n "", \
> > + }; \
> > + verify(&virLogSelf == &virLogSelf)
>
> Isn't an unused variable the sign of a file with no log messages? On
> the other hand, ease of maintenance says it is easier to always have the
> logging framework in place than it is to turn it on/off per file as we
> edit messages in or out of a file.
The issue I hit was that a number of source files only have log messages
when certain configure time flags are set, and some of the conditions
you'd have to protect VIR_LOG_INIT are rather hairy. So I think it is
actually more reliable to just silence the compiler, otherwise certain
configure setups will continually get broken.
> Would the compiler warning also go away if you used:
>
> static ATTRIBUTE_UNUSED virLogSource virlogSelf = {...};
>
> without needing the use of a verify()?
No idea, worth a try. I didn't know ATTRIBUTE_UNUSED would even work
on global variables - thought it was only function parameters.
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list