aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/libvirt/APKBUILD6
-rw-r--r--main/libvirt/virtdaemon-fix-wait-child-process.patch40
2 files changed, 44 insertions, 2 deletions
diff --git a/main/libvirt/APKBUILD b/main/libvirt/APKBUILD
index cd394a6593..f8884a931b 100644
--- a/main/libvirt/APKBUILD
+++ b/main/libvirt/APKBUILD
@@ -2,7 +2,7 @@
pkgname=libvirt
pkgver=6.2.0
_ver="${pkgver/_rc/-rc}"
-pkgrel=0
+pkgrel=1
pkgdesc="A virtualization API for several hypervisor and container systems"
url="https://libvirt.org/"
arch="all"
@@ -33,6 +33,7 @@ source="https://libvirt.org/sources/libvirt-$pkgver.tar.xz
virtlockd.initd
musl-fix-includes.patch
stderr-fix.patch
+ virtdaemon-fix-wait-child-process.patch
"
if [ "$CARCH" = "x86_64" ]; then
subpackages="$subpackages $pkgname-xen"
@@ -196,4 +197,5 @@ sha512sums="96bef701fd73aef93d1490f0bc331901a0ff6250a4f36a3e4844f76cc262dc0ae4cc
36b85f473d292be8df415256d01a562131d8ae61450ba3893658090a12d589ca32215382f56f286a830b4e59ffd98fbe1d92004f2ce14ca0834451b943cd8f2f virtlogd.initd
a4c4d26e4111931acbe7594451bf963a36c8db33c64b1bc447ab4758bb92803510bebee0511d6bc16ba80c289ab6f87e74377d47bf560412f9adb9c161a206d9 virtlockd.initd
dfe042c596028125bf8548115de2922683829c4716f6b0efb8efc38518670e3e848481661b9714bb0664c1022b87e8f3c0773611fe10187b0bc588e2336ada0c musl-fix-includes.patch
-d32551d56eae2c33bab7571964f76421336967918c293cd1d18fc66626a7ead3551b5672a9e3fc3d8b7bca82cc0abb17e428ee8271d04d73bc06fd16309918b3 stderr-fix.patch"
+d32551d56eae2c33bab7571964f76421336967918c293cd1d18fc66626a7ead3551b5672a9e3fc3d8b7bca82cc0abb17e428ee8271d04d73bc06fd16309918b3 stderr-fix.patch
+0bfc4c494e0e1ea48a3922d4c1a258c21c27868e8d4a6c62881fb260591a2652a03b12c0b5d65b4746ebfd89fad6def595b424e2bd4c3c74e15d33472a324835 virtdaemon-fix-wait-child-process.patch"
diff --git a/main/libvirt/virtdaemon-fix-wait-child-process.patch b/main/libvirt/virtdaemon-fix-wait-child-process.patch
new file mode 100644
index 0000000000..7e02030f57
--- /dev/null
+++ b/main/libvirt/virtdaemon-fix-wait-child-process.patch
@@ -0,0 +1,40 @@
+Unlike `waitpid`, `virProcessWait` only returns -1 (error) or 0
+(success), so comparing that to `pid` will always be false and the
+parent will report failure with:
+
+error : main:851 : Failed to fork as daemon: No such file or directory
+
+even though the grandchild process is succesfully running. Note that the
+errno message is misleading: it was last set when trying to find a
+restart state file.
+
+Signed-off-by: Rafael Fonseca <r4f4rfs@gmail.com>
+Reported-by: Marcin Krol <hawk@tld-linux.org>
+---
+ src/util/virdaemon.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/src/util/virdaemon.c b/src/util/virdaemon.c
+index 5d92c7def7..99530fd146 100644
+--- a/src/util/virdaemon.c
++++ b/src/util/virdaemon.c
+@@ -97,15 +97,14 @@ virDaemonForkIntoBackground(const char *argv0)
+ default:
+ {
+ /* parent */
+- int got, exitstatus = 0;
++ int exitstatus = 0;
+ int ret;
+ char status;
+
+ VIR_FORCE_CLOSE(statuspipe[1]);
+
+ /* We wait to make sure the first child forked successfully */
+- if ((got = virProcessWait(pid, &exitstatus, 0)) < 0 ||
+- got != pid ||
++ if (virProcessWait(pid, &exitstatus, 0) < 0 ||
+ exitstatus != 0) {
+ goto error;
+ }
+--
+2.25.2