render / rpms / libvirt

Forked from rpms/libvirt 9 months ago
Clone
Blob Blame History Raw
From 744c445c2b259649afd0f8c715e30d7ae51b35b0 Mon Sep 17 00:00:00 2001
Message-Id: <744c445c2b259649afd0f8c715e30d7ae51b35b0@dist-git>
From: Christian Ehrhardt <christian.ehrhardt@canonical.com>
Date: Wed, 4 Dec 2019 16:18:14 +0100
Subject: [PATCH] process: wait longer 5->30s on hard shutdown
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

In cases where virProcessKillPainfully already reailizes that
SIGTERM wasn't enough we are partially on a bad path already.
Maybe the system is overloaded or having serious trouble to free and
reap resources in time.

In those case give the SIGKILL that was sent after 10 seconds some more
time to take effect if force was set (only then we are falling back to
SIGKILL anyway).

Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
(cherry picked from commit 9a4e4b942df0474503e7524ea427351a46c0eabe)

https://bugzilla.redhat.com/show_bug.cgi?id=1771204

Signed-off-by: Ján Tomko <jtomko@redhat.com>
Message-Id: <963a2cb9ac181322394bc475b200b8fc65e1245a.1575472548.git.jtomko@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
---
 src/util/virprocess.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/util/virprocess.c b/src/util/virprocess.c
index 297c96a8e5..1085e6cd5d 100644
--- a/src/util/virprocess.c
+++ b/src/util/virprocess.c
@@ -354,7 +354,7 @@ virProcessKillPainfullyDelay(pid_t pid, bool force, unsigned int extradelay)
     size_t i;
     int ret = -1;
     /* This is in 1/5th seconds since polling is on a 0.2s interval */
-    unsigned int polldelay = 75 + (extradelay*5);
+    unsigned int polldelay = (force ? 200 : 75) + (extradelay*5);
     const char *signame = "TERM";
 
     VIR_DEBUG("vpid=%lld force=%d extradelay=%u",
@@ -363,7 +363,7 @@ virProcessKillPainfullyDelay(pid_t pid, bool force, unsigned int extradelay)
     /* This loop sends SIGTERM, then waits a few iterations (10 seconds)
      * to see if it dies. If the process still hasn't exited, and
      * @force is requested, a SIGKILL will be sent, and this will
-     * wait up to 5 seconds more for the process to exit before
+     * wait up to 30 seconds more for the process to exit before
      * returning.
      *
      * An extra delay can be passed by the caller for cases that are
-- 
2.24.0