]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Fix multiprocessing Semaphore's on netbsd5. SEM_VALUE_MAX is defined
authorGregory P. Smith <greg@mad-scientist.com>
Sun, 17 Oct 2010 02:14:36 +0000 (02:14 +0000)
committerGregory P. Smith <greg@mad-scientist.com>
Sun, 17 Oct 2010 02:14:36 +0000 (02:14 +0000)
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.

Modules/_multiprocessing/multiprocessing.c

index c584f2b1cf2641940a3322edfe8d3bbce801680b..685814666fe0146feee61703e9ba4140a8405def 100644 (file)
@@ -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