summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGregory P. Smith <greg@mad-scientist.com>2010-10-17 04:23:21 (GMT)
committerGregory P. Smith <greg@mad-scientist.com>2010-10-17 04:23:21 (GMT)
commit397cd8a1fc22c8cbc6f5840a1813fd0f418ee841 (patch)
treeb90649b7b5d9ddce2f412e1ab69641b0d6565d4f
parent67295c3533af5a1f1d29627df73f590c6da35195 (diff)
downloadcpython-397cd8a1fc22c8cbc6f5840a1813fd0f418ee841.zip
cpython-397cd8a1fc22c8cbc6f5840a1813fd0f418ee841.tar.gz
cpython-397cd8a1fc22c8cbc6f5840a1813fd0f418ee841.tar.bz2
Merged revisions 85586-85587,85596-85598 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r85586 | gregory.p.smith | 2010-10-16 17:17:24 -0700 (Sat, 16 Oct 2010) | 2 lines fix for netbsd. ........ r85587 | gregory.p.smith | 2010-10-16 17:43:10 -0700 (Sat, 16 Oct 2010) | 3 lines applying netbsd-wizs-mod.patch from issue5510 - fixes for netbsd (and dragonflybsd?) ........ r85596 | gregory.p.smith | 2010-10-16 19:14:36 -0700 (Sat, 16 Oct 2010) | 6 lines 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. ........ r85597 | gregory.p.smith | 2010-10-16 19:57:19 -0700 (Sat, 16 Oct 2010) | 2 lines skip test_itimer_virtual on NetBSD to prevent the test suite from hanging. ........ r85598 | gregory.p.smith | 2010-10-16 20:09:12 -0700 (Sat, 16 Oct 2010) | 2 lines Avoid hanging the test on netbsd5. ........
-rw-r--r--Lib/test/test_signal.py4
-rw-r--r--Lib/test/test_socket.py6
-rw-r--r--Lib/test/test_threading.py3
-rw-r--r--Modules/_multiprocessing/multiprocessing.c15
-rw-r--r--Modules/socketmodule.c27
5 files changed, 46 insertions, 9 deletions
diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
index 1f15ff7..83ac669 100644
--- a/Lib/test/test_signal.py
+++ b/Lib/test/test_signal.py
@@ -438,8 +438,8 @@ class ItimerTest(unittest.TestCase):
self.assertEqual(self.hndl_called, True)
# Issue 3864, unknown if this affects earlier versions of freebsd also
- @unittest.skipIf(sys.platform=='freebsd6',
- 'itimer not reliable (does not mix well with threading) on freebsd6')
+ @unittest.skipIf(sys.platform in ('freebsd6', 'netbsd5'),
+ 'itimer not reliable (does not mix well with threading) on some BSDs.')
def test_itimer_virtual(self):
self.itimer = signal.ITIMER_VIRTUAL
signal.signal(signal.SIGVTALRM, self.sig_vtalrm)
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index c33c823..a467e0d 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -351,8 +351,10 @@ class GeneralModuleTests(unittest.TestCase):
# Find one service that exists, then check all the related interfaces.
# I've ordered this by protocols that have both a tcp and udp
# protocol, at least for modern Linuxes.
- if sys.platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6',
- 'freebsd7', 'freebsd8', 'darwin'):
+ if (sys.platform.startswith('linux') or
+ sys.platform.startswith('freebsd') or
+ sys.platform.startswith('netbsd') or
+ sys.platform == 'darwin'):
# avoid the 'echo' service on this platform, as there is an
# assumption breaking non-standard port/protocol entry
services = ('daytime', 'qotd', 'domain')
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index 713ea9c..a4a6ed6 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -459,7 +459,8 @@ class ThreadJoinOnShutdown(unittest.TestCase):
return
# Skip platforms with known problems forking from a worker thread.
# See http://bugs.python.org/issue3863.
- if sys.platform in ('freebsd4', 'freebsd5', 'freebsd6', 'os2emx'):
+ if sys.platform in ('freebsd4', 'freebsd5', 'freebsd6', 'netbsd5',
+ 'os2emx'):
print('Skipping test_3_join_in_forked_from_thread'
' due to known OS bugs on', sys.platform, file=sys.stderr)
return
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
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index f88043c..834fc69 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -379,7 +379,7 @@ dup_socket(SOCKET handle)
#define SOCKETCLOSE close
#endif
-#if (defined(HAVE_BLUETOOTH_H) || defined(HAVE_BLUETOOTH_BLUETOOTH_H)) && !defined(__NetBSD__)
+#if (defined(HAVE_BLUETOOTH_H) || defined(HAVE_BLUETOOTH_BLUETOOTH_H)) && !defined(__NetBSD__) && !defined(__DragonFly__)
#define USE_BLUETOOTH 1
#if defined(__FreeBSD__)
#define BTPROTO_L2CAP BLUETOOTH_PROTO_L2CAP
@@ -393,11 +393,13 @@ dup_socket(SOCKET handle)
#define _BT_L2_MEMB(sa, memb) ((sa)->l2cap_##memb)
#define _BT_RC_MEMB(sa, memb) ((sa)->rfcomm_##memb)
#define _BT_HCI_MEMB(sa, memb) ((sa)->hci_##memb)
-#elif defined(__NetBSD__)
+#elif defined(__NetBSD__) || defined(__DragonFly__)
#define sockaddr_l2 sockaddr_bt
#define sockaddr_rc sockaddr_bt
#define sockaddr_hci sockaddr_bt
#define sockaddr_sco sockaddr_bt
+#define SOL_HCI BTPROTO_HCI
+#define HCI_DATA_DIR SO_HCI_DIRECTION
#define _BT_L2_MEMB(sa, memb) ((sa)->bt_##memb)
#define _BT_RC_MEMB(sa, memb) ((sa)->bt_##memb)
#define _BT_HCI_MEMB(sa, memb) ((sa)->bt_##memb)
@@ -1039,9 +1041,13 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto)
case BTPROTO_HCI:
{
struct sockaddr_hci *a = (struct sockaddr_hci *) addr;
+#if defined(__NetBSD__) || defined(__DragonFly__)
+ return makebdaddr(&_BT_HCI_MEMB(a, bdaddr));
+#else
PyObject *ret = NULL;
ret = Py_BuildValue("i", _BT_HCI_MEMB(a, dev));
return ret;
+#endif
}
#if !defined(__FreeBSD__)
@@ -1325,12 +1331,25 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
case BTPROTO_HCI:
{
struct sockaddr_hci *addr = (struct sockaddr_hci *)addr_ret;
+#if defined(__NetBSD__) || defined(__DragonFly__)
+ char *straddr = PyBytes_AS_STRING(args);
+
+ _BT_HCI_MEMB(addr, family) = AF_BLUETOOTH;
+ if (straddr == NULL) {
+ PyErr_SetString(socket_error, "getsockaddrarg: "
+ "wrong format");
+ return 0;
+ }
+ if (setbdaddr(straddr, &_BT_HCI_MEMB(addr, bdaddr)) < 0)
+ return 0;
+#else
_BT_HCI_MEMB(addr, family) = AF_BLUETOOTH;
if (!PyArg_ParseTuple(args, "i", &_BT_HCI_MEMB(addr, dev))) {
PyErr_SetString(socket_error, "getsockaddrarg: "
"wrong format");
return 0;
}
+#endif
*len_ret = sizeof *addr;
return 1;
}
@@ -4400,9 +4419,13 @@ PyInit__socket(void)
PyModule_AddIntConstant(m, "BTPROTO_L2CAP", BTPROTO_L2CAP);
PyModule_AddIntConstant(m, "BTPROTO_HCI", BTPROTO_HCI);
PyModule_AddIntConstant(m, "SOL_HCI", SOL_HCI);
+#if !defined(__NetBSD__) && !defined(__DragonFly__)
PyModule_AddIntConstant(m, "HCI_FILTER", HCI_FILTER);
+#endif
#if !defined(__FreeBSD__)
+#if !defined(__NetBSD__) && !defined(__DragonFly__)
PyModule_AddIntConstant(m, "HCI_TIME_STAMP", HCI_TIME_STAMP);
+#endif
PyModule_AddIntConstant(m, "HCI_DATA_DIR", HCI_DATA_DIR);
PyModule_AddIntConstant(m, "BTPROTO_SCO", BTPROTO_SCO);
#endif