From d442ee23bd2bb03d456d5de2a41ca07828d998ca Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 31 Oct 2012 19:03:52 +0000 Subject: [PATCH] Introduce a 'stop' method to virDriverState To allow actions to be performed in libvirtd when the host shuts down, or user session exits, introduce a 'stop' method to virDriverState. This will do things like saving the VM state to a file. Signed-off-by: Daniel P. Berrange --- src/driver.h | 2 ++ src/libvirt.c | 18 ++++++++++++++++++ src/libvirt_daemon.syms | 1 + src/libvirt_internal.h | 1 + 4 files changed, 22 insertions(+) diff --git a/src/driver.h b/src/driver.h index 9add96c68f..ea2ecc392d 100644 --- a/src/driver.h +++ b/src/driver.h @@ -1504,6 +1504,7 @@ typedef int (*virDrvStateInitialize) (int privileged); typedef int (*virDrvStateCleanup) (void); typedef int (*virDrvStateReload) (void); typedef int (*virDrvStateActive) (void); +typedef int (*virDrvStateStop) (void); typedef struct _virStateDriver virStateDriver; typedef virStateDriver *virStateDriverPtr; @@ -1514,6 +1515,7 @@ struct _virStateDriver { virDrvStateCleanup cleanup; virDrvStateReload reload; virDrvStateActive active; + virDrvStateStop stop; }; # endif diff --git a/src/libvirt.c b/src/libvirt.c index 03c2f94196..7656fca3fe 100644 --- a/src/libvirt.c +++ b/src/libvirt.c @@ -869,6 +869,24 @@ int virStateActive(void) { return ret; } +/** + * virStateStop: + * + * Run each virtualization driver's "stop" method. + * + * Returns 0 if successful, -1 on failure + */ +int virStateStop(void) { + int i, ret = 0; + + for (i = 0 ; i < virStateDriverTabCount ; i++) { + if (virStateDriverTab[i]->stop && + virStateDriverTab[i]->stop()) + ret = 1; + } + return ret; +} + #endif diff --git a/src/libvirt_daemon.syms b/src/libvirt_daemon.syms index 7c914fa8e7..dde77a6da3 100644 --- a/src/libvirt_daemon.syms +++ b/src/libvirt_daemon.syms @@ -8,3 +8,4 @@ virStateActive; virStateCleanup; virStateInitialize; virStateReload; +virStateStop; diff --git a/src/libvirt_internal.h b/src/libvirt_internal.h index 71483e4695..a39aaa41d8 100644 --- a/src/libvirt_internal.h +++ b/src/libvirt_internal.h @@ -32,6 +32,7 @@ int virStateInitialize(int privileged); int virStateCleanup(void); int virStateReload(void); int virStateActive(void); +int virStateStop(void); # endif /* Feature detection. This is a libvirt-private interface for determining