[Spice-devel] spice-server, logging and style

Christophe Fergeau cfergeau at redhat.com
Fri Nov 20 09:33:43 PST 2015


Hey,

So there has been quite some discussions about logging.

To sum up my personal thoughts on this:

- we should just switch to using glib for logging. This means some mass
  renaming will need to be done at some point. Maybe it's possible to do
  it on the whole refactoring branch through git filter-branch or some
  similar tool, if not we can keep some #define spice_warning g_warning
  for now. We can also deprecate SPICE_DEBUG_LEVEL/SPICE_ASSERT_LEVEL
  while still keeping them kind of working with glib.

- spice_return_if_fail needs to be dealt with though, either we decide
  it's fine to have it return instead of asserting, and we can just
  change it to g_return_if_fail, either we decide it's not safe, and its
  name should more accurately reflect that it asserts rather than
  returning. I would not change it to g_assert() to make it easy to spot
  the places we need to review whether we can g_return_if_fail() or not.

- when a commit from the refactoring branch changes an assert() to a
  spice_return_if_fail(), we need to have a proper justification as to
  why this is safe to do, and also use g_return_if_fail() rather than
  the spice version which asserts. If the patch looks safe, I would not
  reject it on the basis that "we don't want to look at spice_assert()
  changes now". When these changes are reviewed now, this means less
  things to audit later.


Regarding use of assert() VS g_return_if_fail().
glib documentation for g_return_if_fail() says « If expr evaluates to
FALSE, the current function should be considered to have undefined
behaviour (a programmer error). The only correct solution to such an
error is to change the module that is calling the current function, so
that it avoids this incorrect call. »

In short, I'd use it to document programmer expectation/assumption. The
most classical use is to validate the parameters passed to (usually
non-static) methods. Imo it's useful to do this in more methods than
just the spice-server/QEMU interface, but also for most non-static methods.
Then you can also document some more assumption, like "at this point,
when I call this method, its return value really should not be NULL".
If we know nothing bad will happen by returning early, it's better to
just do it rather than dying in an assert.

Then, there are some cases where there is no real good way to deal with
the unexpected situation, even though it's bad, an assert is still
better than getting in an unpredictable situation (potentially
crashes/...).

Regarding inconsistencies detected in refcounts, I don't have a strong
opinion on assert'ing VS not assert'ing, but since it can indicated memory
corruption, assert'ing makes sense. We can always change it if this
causes too much trouble.


I'll look some more at changing spice-common/common/log.[ch] to use glib
instead of its own logging, and I'll see how we can make a global search
and replace on the branch which is currently being merged if there is no
strong disagreement to all of this.

Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20151120/d52c3eb8/attachment-0001.sig>


More information about the Spice-devel mailing list