[Spice-devel] [PATCH spice-server] display-channel: Check that all structure are destroyed during finalize

Frediano Ziglio fziglio at redhat.com
Fri Aug 25 12:25:36 UTC 2017


> 
> On Thu, Aug 24, 2017 at 05:11:34AM -0400, Frediano Ziglio wrote:
> > > 
> > > On Tue, 2017-08-22 at 08:54 +0100, Frediano Ziglio wrote:
> > > > The leak detector we use currently is not enough to detect
> > > > some kind of leak in DisplayChannel so manully test.
> > > > These tests are enabled only when --enable-extra-checks is passed
> > > > to configure.
> > > 
> > > 
> > > Out of curiosity, did you find a bug that made you add this extra
> > > check?
> > > 
> > 
> > No, was more some old code I wrote (I think more than 1 year ago)
> > when I started my "cleanup" branch.
> > 
> > > > 
> > > > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > > > ---
> > > >  configure.ac             |  2 ++
> > > >  server/display-channel.c | 22 ++++++++++++++++++++++
> > > >  2 files changed, 24 insertions(+)
> > > > 
> > > > diff --git a/configure.ac b/configure.ac
> > > > index e1e74862..7fec66fc 100644
> > > > --- a/configure.ac
> > > > +++ b/configure.ac
> > > > @@ -247,6 +247,8 @@ AC_ARG_ENABLE([extra-checks],
> > > >                 AS_HELP_STRING([--enable-extra-
> > > > checks=@<:@yes/no@:>@],
> > > >                                [Enable expensive checks
> > > > @<:@default=no@:>@]))
> > > >  AM_CONDITIONAL(ENABLE_EXTRA_CHECKS, test "$enable_extra_checks" =
> > > > "yes")
> > > > +AC_DEFINE_UNQUOTED([ENABLE_EXTRA_CHECKS], [$(test
> > > > "x$enable_extra_checks" = xyes && echo 1 || echo 0)],
> > > > +                   [Define to 1 to enable extra checks on code])
> > 
> > A bit of note on this. Usually AC_DEFINEs are not defined or defined
> > to 1. This is defined to 0 or 1 which is a bit different from the
> > standard. However code like:
> > 
> >    if (ENABLE_EXTRA_CHECKS)
> > 
> > cause a compiler error. Maybe the comment "Define to 1 to enable
> > extra checks on code" should be more explicit about it?
> > On the other way this should affect only people that needs
> > to edit manually config.h and as said would be generating a
> > compiler error if they undefine that constant.
> > A difference from the standard is that code like
> > 
> > #ifdef ENABLE_EXTRA_CHECKS
> > 
> > should not be used. Maybe a syntax-check extension could help
> > with this.
> 
> I would have gone with something more standard,
> 
> if test "x$enable_extra_checks" = xyes; then
>   AC_DEFINE_UNQUOTED([ENABLE_EXTRA_CHECKS],
>                      [1],
>                      [Define to 1 to enable extra checks on code otherwise
>                      defined to 0])
> fi
> 
> and then
> 
> #ifdef ENABLE_EXTRA_CHECKS
> static int enable_extra_checks = 1;
> #else
> static int enable_extra_checks = 0;
> #endif
> 
> if (enable_extra_checks) {
> }
> 
> Christophe
> 

Does not work, "static int" are not compile time constant.
And as you realized not even "static const int" in C
(they are in C++).

#defines and enums are compile time constants so a

#ifdef ENABLE_EXTRA_CHECKS
enum { enable_extra_checks = 1 };
#else
enum { enable_extra_checks = 0 };
#endif

would work, or a

#ifndef ENABLE_EXTRA_CHECKS
#define ENABLE_EXTRA_CHECKS 0
#endif

OT: why if DEFINE is not defined as a preprocessor macro
"#if DEFINE" is false?

Frediano


More information about the Spice-devel mailing list