diff options
author | Gregory P. Smith <greg@mad-scientist.com> | 2010-10-17 02:14:36 (GMT) |
---|---|---|
committer | Gregory P. Smith <greg@mad-scientist.com> | 2010-10-17 02:14:36 (GMT) |
commit | 68e0135e4121b3e341aea7acf1cd017be74b50cf (patch) | |
tree | 07274405533df20a2d1337673d7c3a0602eae7c1 | |
parent | ed7916dd001d5d49b5be04a745c2f83826b27fe2 (diff) | |
download | cpython-68e0135e4121b3e341aea7acf1cd017be74b50cf.zip cpython-68e0135e4121b3e341aea7acf1cd017be74b50cf.tar.gz cpython-68e0135e4121b3e341aea7acf1cd017be74b50cf.tar.bz2 |
Fix multiprocessing Semaphore's on netbsd5. SEM_VALUE_MAX is defined
as (~0U) on NetBSD which was causing it to appear as -1 when used as
a signed int for _multprocessing.SemLock.SEM_VALUE_MAX. This works
around the problem by substituting INT_MAX on systems where it appears
negative when used as an int.
-rw-r--r-- | Modules/_multiprocessing/multiprocessing.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/Modules/_multiprocessing/multiprocessing.c b/Modules/_multiprocessing/multiprocessing.c index c584f2b..6858146 100644 --- a/Modules/_multiprocessing/multiprocessing.c +++ b/Modules/_multiprocessing/multiprocessing.c @@ -269,8 +269,19 @@ PyInit__multiprocessing(void) if (PyType_Ready(&SemLockType) < 0) return NULL; Py_INCREF(&SemLockType); - PyDict_SetItemString(SemLockType.tp_dict, "SEM_VALUE_MAX", - Py_BuildValue("i", SEM_VALUE_MAX)); + { + PyObject *py_sem_value_max; + /* Some systems define SEM_VALUE_MAX as an unsigned value that + * causes it to be negative when used as an int (NetBSD). */ + if ((int)(SEM_VALUE_MAX) < 0) + py_sem_value_max = PyLong_FromLong(INT_MAX); + else + py_sem_value_max = PyLong_FromLong(SEM_VALUE_MAX); + if (py_sem_value_max == NULL) + return NULL; + PyDict_SetItemString(SemLockType.tp_dict, "SEM_VALUE_MAX", + py_sem_value_max); + } PyModule_AddObject(module, "SemLock", (PyObject*)&SemLockType); #endif |