diff options
-rw-r--r-- | main/libvirt/APKBUILD | 6 | ||||
-rw-r--r-- | main/libvirt/virtdaemon-fix-wait-child-process.patch | 40 |
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 |