On Wed, Jan 08, 2025 at 19:42:41 +0000, Daniel P. Berrangé wrote:
> Currently the virStateStop method is only wired up to run save for
> the unprivileged daemons, so there is no functional change.
>
> IOW, session exit, or host OS shutdown will trigger VM managed saved
> for QEMU session daemon, but not the system daemon.
>
> This changes the daemon code to always run virStateStop for all
> daemons. Instead the QEMU driver is responsible for skipping its
> own logic when running privileged...for now.
>
> This means that virStateStop will now be triggered by logind's
> PrepareForShutdown signal.
>
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
> src/qemu/qemu_driver.c | 3 ++-
> src/remote/remote_daemon.c | 28 +++++++++++++++-------------
> 2 files changed, 17 insertions(+), 14 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 8c16566ce8..103369ac93 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -949,7 +949,8 @@ qemuStateStop(void)
> .uri = cfg->uri,
> };
>
> - virDomainDriverAutoShutdown(&ascfg);
> + if (!qemu_driver->privileged)
> + virDomainDriverAutoShutdown(&ascfg);
>
> return 0;
> }
> diff --git a/src/remote/remote_daemon.c b/src/remote/remote_daemon.c
> index d44a365000..c4b930cb70 100644
> --- a/src/remote/remote_daemon.c
> +++ b/src/remote/remote_daemon.c
> @@ -628,27 +628,29 @@ static void daemonRunStateInit(void *opaque)
> virStateShutdownPrepare,
> virStateShutdownWait);
>
> - /* Tie the non-privileged daemons to the session/shutdown lifecycle */
> + /* Signal for VM shutdown when desktop session is terminated, in
> + * unprivileged daemons */
> if (!virNetDaemonIsPrivileged(dmn)) {
> -
> sessionBus = virGDBusGetSessionBus();
> if (sessionBus != NULL)
> g_dbus_connection_add_filter(sessionBus,
> handleSessionMessageFunc, dmn, NULL);
> + }
>
> - systemBus = virGDBusGetSystemBus();
> - if (systemBus != NULL)
> - g_dbus_connection_signal_subscribe(systemBus,
> - "org.freedesktop.login1",
> - "org.freedesktop.login1.Manager",
> - "PrepareForShutdown",
> - NULL,
> - NULL,
> - G_DBUS_SIGNAL_FLAGS_NONE,
> - handleSystemMessageFunc,
> + /* Signal for VM shutdown when host OS shutdown is requested, in
> + * both privileged and unprivileged daemons */
> + systemBus = virGDBusGetSystemBus();
> + if (systemBus != NULL)
> + g_dbus_connection_signal_subscribe(systemBus,
> + "org.freedesktop.login1",
> + "org.freedesktop.login1.Manager",
> + "PrepareForShutdown",
> + NULL,
> + NULL,
> + G_DBUS_SIGNAL_FLAGS_NONE,
> + handleSystemMessageFunc,
> dmn,
> NULL);
This patch leaves the code mis-aligned. You later fix it in 23/26. Move
the hunk here.
> - }
>
> /* Only now accept clients from network */
> virNetDaemonUpdateServices(dmn, true);
> --
> 2.47.1
>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>