From 0f38dedd8929dcb1473fc64773be4b941526ee1d Mon Sep 17 00:00:00 2001 From: Nikolay Shirokovskiy Date: Thu, 23 Jul 2020 09:43:46 +0300 Subject: [PATCH] rpc: add virNetDaemonSetShutdownCallbacks The function is used to set shutdown prepare and wait callbacks. Prepare callback is used to inform other threads of the daemon that the daemon will be closed soon so that they can start to shutdown. Wait callback is used to wait for other threads to actually finish. Signed-off-by: Nikolay Shirokovskiy Reviewed-by: Daniel Henrique Barboza --- src/libvirt_remote.syms | 1 + src/rpc/virnetdaemon.c | 15 +++++++++++++++ src/rpc/virnetdaemon.h | 6 ++++++ 3 files changed, 22 insertions(+) diff --git a/src/libvirt_remote.syms b/src/libvirt_remote.syms index 0018a0c41d..335e431ca9 100644 --- a/src/libvirt_remote.syms +++ b/src/libvirt_remote.syms @@ -87,6 +87,7 @@ virNetDaemonPreExecRestart; virNetDaemonQuit; virNetDaemonRemoveShutdownInhibition; virNetDaemonRun; +virNetDaemonSetShutdownCallbacks; virNetDaemonUpdateServices; diff --git a/src/rpc/virnetdaemon.c b/src/rpc/virnetdaemon.c index 81c2816e6e..5e3a41d19c 100644 --- a/src/rpc/virnetdaemon.c +++ b/src/rpc/virnetdaemon.c @@ -69,6 +69,8 @@ struct _virNetDaemon { virHashTablePtr servers; virJSONValuePtr srvObject; + virNetDaemonShutdownCallback shutdownPrepareCb; + virNetDaemonShutdownCallback shutdownWaitCb; bool quit; unsigned int autoShutdownTimeout; @@ -922,3 +924,16 @@ virNetDaemonHasClients(virNetDaemonPtr dmn) return ret; } + +void +virNetDaemonSetShutdownCallbacks(virNetDaemonPtr dmn, + virNetDaemonShutdownCallback prepareCb, + virNetDaemonShutdownCallback waitCb) +{ + virObjectLock(dmn); + + dmn->shutdownPrepareCb = prepareCb; + dmn->shutdownWaitCb = waitCb; + + virObjectUnlock(dmn); +} diff --git a/src/rpc/virnetdaemon.h b/src/rpc/virnetdaemon.h index c2c7767037..9f7a282580 100644 --- a/src/rpc/virnetdaemon.h +++ b/src/rpc/virnetdaemon.h @@ -82,3 +82,9 @@ virNetServerPtr virNetDaemonGetServer(virNetDaemonPtr dmn, ssize_t virNetDaemonGetServers(virNetDaemonPtr dmn, virNetServerPtr **servers); bool virNetDaemonHasServer(virNetDaemonPtr dmn, const char *serverName); + +typedef int (*virNetDaemonShutdownCallback)(void); + +void virNetDaemonSetShutdownCallbacks(virNetDaemonPtr dmn, + virNetDaemonShutdownCallback prepareCb, + virNetDaemonShutdownCallback waitCb); -- 2.47.2