On 6/13/22 15:56, Peter Krempa wrote:
Modify the code so that calling 'virNetDaemonAutoShutdown'
will update
the auto shutdown timeout also for running daemons.
This involves changing the logic when to do the update of the timer so
that it can be called from both when the daemon is not yet runnign and
when doing a live update.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/locking/lock_daemon.c | 5 ++---
src/logging/log_daemon.c | 5 ++---
src/remote/remote_daemon.c | 4 ++--
src/rpc/virnetdaemon.c | 29 +++++++++++++++++++++--------
src/rpc/virnetdaemon.h | 4 ++--
5 files changed, 29 insertions(+), 18 deletions(-)
diff --git a/src/rpc/virnetdaemon.c b/src/rpc/virnetdaemon.c
index 7bf27eed9d..84af1adc06 100644
--- a/src/rpc/virnetdaemon.c
+++ b/src/rpc/virnetdaemon.c
@@ -75,6 +75,7 @@ struct _virNetDaemon {
bool finished;
bool graceful;
bool execRestart;
+ bool running; /* the daemon has reached the running phase */
unsigned int autoShutdownTimeout;
int autoShutdownTimerID;
@@ -424,7 +425,7 @@ virNetDaemonAutoShutdownTimer(int timerid G_GNUC_UNUSED,
static int
virNetDaemonShutdownTimerRegister(virNetDaemon *dmn)
{
- if (dmn->autoShutdownTimeout == 0)
+ if (dmn->autoShutdownTimerID != -1)
return 0;
if ((dmn->autoShutdownTimerID = virEventAddTimeout(-1,
@@ -442,7 +443,7 @@ virNetDaemonShutdownTimerRegister(virNetDaemon *dmn)
static void
virNetDaemonShutdownTimerUpdate(virNetDaemon *dmn)
{
- if (dmn->autoShutdownTimeout == 0)
+ if (dmn->autoShutdownTimerID == -1)
return;
/* A shutdown timeout is specified, so check
@@ -450,13 +451,15 @@ virNetDaemonShutdownTimerUpdate(virNetDaemon *dmn)
* shutdown after timeout seconds
*/
if (dmn->autoShutdownTimerActive) {
- if (virNetDaemonHasClients(dmn)) {
+ if (virNetDaemonHasClients(dmn) ||
+ dmn->autoShutdownTimeout == 0) {
Here the logical OR makes sense, because either of the conditions has to
lead to timer deactivation, however ...
VIR_DEBUG("Deactivating shutdown timer %d",
dmn->autoShutdownTimerID);
virEventUpdateTimeout(dmn->autoShutdownTimerID, -1);
dmn->autoShutdownTimerActive = false;
}
} else {
- if (!virNetDaemonHasClients(dmn)) {
+ if (!virNetDaemonHasClients(dmn) ||
+ dmn->autoShutdownTimeout != 0) {
... here both conditions have to be met. Otherwise setting timeout to 0
and disconnecting the last client will lead to immediate quit of the daemon.
Michal