[libvirt] [PATCH 09/10] Inhibit desktop shutdown while any virtual machines are running

Eric Blake eblake at redhat.com
Tue Nov 27 21:20:49 UTC 2012


> Use the freedesktop inhibition DBus service to prevent host
> shutdown or session logout while any VMs are running.
> 
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
>  src/rpc/virnetserver.c | 110
>  +++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 110 insertions(+)
> 

> +++ b/src/rpc/virnetserver.c
> @@ -27,6 +27,10 @@
>  #include <string.h>
>  #include <fcntl.h>
>  
> +#ifdef HAVE_DBUS
> +# include <dbus/dbus.h>

Do we really need this header...

> +#endif
> +
>  #include "virnetserver.h"
>  #include "logging.h"
>  #include "memory.h"
> @@ -37,6 +41,7 @@
>  #include "virfile.h"
>  #include "event.h"
>  #include "virnetservermdns.h"
> +#include "virdbus.h"

...or is this local header sufficient?  (That is, should you rework
this patch to put the raw dbus_* calls isolated into virdbus.[ch],
rathar than having this file have to use conditional compilation)?

> @@ -391,6 +398,7 @@ virNetServerPtr virNetServerNew(size_t
> min_workers,
>      srv->clientPrivFree = clientPrivFree;
>      srv->clientPrivOpaque = clientPrivOpaque;
>      srv->privileged = geteuid() == 0 ? true : false;

Pre-existing, but I find 'some_bool_expr ? true : false' to be
overkill, compared to 'some_bool_expr'.

> +
> +/* As per: http://www.freedesktop.org/wiki/Software/systemd/inhibit
> */
> +static void virNetServerCallInhibit(virNetServerPtr srv,
> +                                    const char *what,
> +                                    const char *who,
> +                                    const char *why,
> +                                    const char *mode)
> +{
> +    DBusMessage *message;
> +    DBusPendingCall *pendingReply;
> +    DBusConnection *systemBus;
> +
> +    VIR_DEBUG("srv=%p what=%s who=%s why=%s mode=%s",

syntax-check didn't complain about mode=%s?  (I know it complains
about mode=%d, and favors mode=%o instead; but I guess a string
mode should not be an error).

>  void virNetServerAddShutdownInhibition(virNetServerPtr srv)
>  {
>      virNetServerLock(srv);
>      srv->autoShutdownInhibitions++;
> +
> +    VIR_DEBUG("srv=%p inhibitions=%zu", srv,
> srv->autoShutdownInhibitions);

Should this debug line be hoisted into the earlier patch that introduced
inhibition callbacks?

> @@ -728,6 +830,12 @@ void
> virNetServerRemoveShutdownInhibition(virNetServerPtr srv)
>  {
>      virNetServerLock(srv);
>      srv->autoShutdownInhibitions--;
> +
> +    VIR_DEBUG("srv=%p inhibitions=%zu", srv,
> srv->autoShutdownInhibitions);

Again, should this debug be hoisted into an earlier patch?

Overall, looks pretty slick!




More information about the libvir-list mailing list