summaryrefslogtreecommitdiff
path: root/dev-lang/python/files/python-2.7.10-semaphore-pid.patch
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2015-08-08 13:49:04 -0700
committerRobin H. Johnson <robbat2@gentoo.org>2015-08-08 17:38:18 -0700
commit56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch)
tree3f91093cdb475e565ae857f1c5a7fd339e2d781e /dev-lang/python/files/python-2.7.10-semaphore-pid.patch
downloadgentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip
proj/gentoo: Initial commit
This commit represents a new era for Gentoo: Storing the gentoo-x86 tree in Git, as converted from CVS. This commit is the start of the NEW history. Any historical data is intended to be grafted onto this point. Creation process: 1. Take final CVS checkout snapshot 2. Remove ALL ChangeLog* files 3. Transform all Manifests to thin 4. Remove empty Manifests 5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$ 5.1. Do not touch files with -kb/-ko keyword flags. Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'dev-lang/python/files/python-2.7.10-semaphore-pid.patch')
-rw-r--r--dev-lang/python/files/python-2.7.10-semaphore-pid.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/dev-lang/python/files/python-2.7.10-semaphore-pid.patch b/dev-lang/python/files/python-2.7.10-semaphore-pid.patch
new file mode 100644
index 000000000000..97fcbd0c49c7
--- /dev/null
+++ b/dev-lang/python/files/python-2.7.10-semaphore-pid.patch
@@ -0,0 +1,51 @@
+Fix for semaphores in pid namespaces
+
+http://bugs.python.org/issue24303
+
+--- a/Modules/_multiprocessing/semaphore.c
++++ b/Modules/_multiprocessing/semaphore.c
+@@ -7,6 +7,7 @@
+ */
+
+ #include "multiprocessing.h"
++#include <time.h>
+
+ enum { RECURSIVE_MUTEX, SEMAPHORE };
+
+@@ -419,7 +420,7 @@ semlock_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+ {
+ char buffer[256];
+ SEM_HANDLE handle = SEM_FAILED;
+- int kind, maxvalue, value;
++ int kind, maxvalue, value, try;
+ PyObject *result;
+ static char *kwlist[] = {"kind", "value", "maxvalue", NULL};
+ static int counter = 0;
+@@ -433,10 +434,24 @@ semlock_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+ return NULL;
+ }
+
+- PyOS_snprintf(buffer, sizeof(buffer), "/mp%ld-%d", (long)getpid(), counter++);
++ /* With pid namespaces, we may have multiple processes with the same pid.
++ * Instead of relying on the pid to be unique, we use the microseconds time
++ * to attempt to a unique filename. */
++ for (try = 0; try < 100; ++try) {
++ struct timespec tv;
++ long arbitrary = clock_gettime(CLOCK_REALTIME, &tv) ? 0 : tv.tv_nsec;
++ PyOS_snprintf(buffer, sizeof(buffer), "/mp%ld-%d-%ld",
++ (long)getpid(),
++ counter++,
++ arbitrary);
++ SEM_CLEAR_ERROR();
++ handle = SEM_CREATE(buffer, value, maxvalue);
++ if (handle != SEM_FAILED)
++ break;
++ else if (errno != EEXIST)
++ goto failure;
++ }
+
+- SEM_CLEAR_ERROR();
+- handle = SEM_CREATE(buffer, value, maxvalue);
+ /* On Windows we should fail if GetLastError()==ERROR_ALREADY_EXISTS */
+ if (handle == SEM_FAILED || SEM_GET_LAST_ERROR() != 0)
+ goto failure;