From ae9d21f98afd2862a9d632f0b05ea99fecc674b1 Mon Sep 17 00:00:00 2001 From: Juergen Buchmueller Date: Sat, 31 Dec 2016 17:48:59 +0100 Subject: [PATCH] python: fix i686 semaphore locking Closes #5432 --- .../patches/fix-i686-semaphore_lock.patch | 19 +++++++++++++++++++ srcpkgs/python/template | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/python/patches/fix-i686-semaphore_lock.patch diff --git a/srcpkgs/python/patches/fix-i686-semaphore_lock.patch b/srcpkgs/python/patches/fix-i686-semaphore_lock.patch new file mode 100644 index 00000000000..625e73ef11f --- /dev/null +++ b/srcpkgs/python/patches/fix-i686-semaphore_lock.patch @@ -0,0 +1,19 @@ +Make sure sval is set before comparing it with self->maxvalue. +Compare only if the return value was zero. +This fixes "ValueError: semaphore or lock released too many times" +which occured only for i686. + +--- Modules/_multiprocessing/semaphore.c 2016-12-17 21:05:07.000000000 +0100 ++++ Modules/_multiprocessing/semaphore.c 2016-12-31 17:42:30.429238082 +0100 +@@ -382,9 +382,10 @@ + + /* This check is not an absolute guarantee that the semaphore + does not rise above maxvalue. */ ++ int res = sem_getvalue(self->handle, &sval); + if (sem_getvalue(self->handle, &sval) < 0) { + return PyErr_SetFromErrno(PyExc_OSError); +- } else if (sval >= self->maxvalue) { ++ } else if (res == 0 && sval >= self->maxvalue) { + PyErr_SetString(PyExc_ValueError, "semaphore or lock " + "released too many times"); + return NULL; diff --git a/srcpkgs/python/template b/srcpkgs/python/template index bea4ee9a4d2..f25f523bc75 100644 --- a/srcpkgs/python/template +++ b/srcpkgs/python/template @@ -4,7 +4,7 @@ # pkgname=python version=2.7.13 -revision=1 +revision=2 wrksrc="Python-${version}" hostmakedepends="pkg-config" makedepends="