# HG changeset patch # Parent 8af2dc11464ffe182cdddd9b2a3c5efea143f7df diff --git a/Lib/multiprocessing/sharedctypes.py b/Lib/multiprocessing/sharedctypes.py --- a/Lib/multiprocessing/sharedctypes.py +++ b/Lib/multiprocessing/sharedctypes.py @@ -23,12 +23,13 @@ # typecode_to_type = { - 'c': ctypes.c_char, 'u': ctypes.c_wchar, - 'b': ctypes.c_byte, 'B': ctypes.c_ubyte, - 'h': ctypes.c_short, 'H': ctypes.c_ushort, - 'i': ctypes.c_int, 'I': ctypes.c_uint, - 'l': ctypes.c_long, 'L': ctypes.c_ulong, - 'f': ctypes.c_float, 'd': ctypes.c_double + 'c': ctypes.c_char, 'u': ctypes.c_wchar, + 'b': ctypes.c_byte, 'B': ctypes.c_ubyte, + 'h': ctypes.c_short, 'H': ctypes.c_ushort, + 'i': ctypes.c_int, 'I': ctypes.c_uint, + 'l': ctypes.c_long, 'L': ctypes.c_ulong, + 'q': ctypes.c_longlong, 'Q': ctypes.c_ulonglong, + 'f': ctypes.c_float, 'd': ctypes.c_double } # diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py --- a/Lib/test/_test_multiprocessing.py +++ b/Lib/test/_test_multiprocessing.py @@ -107,7 +107,7 @@ # try: - from ctypes import Structure, c_int, c_double + from ctypes import Structure, c_int, c_double, c_longlong except ImportError: Structure = object c_int = c_double = None @@ -1431,6 +1431,7 @@ ('i', 4343, 24234), ('d', 3.625, -4.25), ('h', -232, 234), + ('q', 2 ** 33, 2 ** 34), ('c', latin('x'), latin('y')) ] @@ -2722,7 +2723,8 @@ class _Foo(Structure): _fields_ = [ ('x', c_int), - ('y', c_double) + ('y', c_double), + ('z', c_longlong,) ] class _TestSharedCTypes(BaseTestCase): @@ -2734,9 +2736,10 @@ self.skipTest("requires multiprocessing.sharedctypes") @classmethod - def _double(cls, x, y, foo, arr, string): + def _double(cls, x, y, z, foo, arr, string): x.value *= 2 y.value *= 2 + z.value *= 2 foo.x *= 2 foo.y *= 2 string.value *= 2 @@ -2746,18 +2749,20 @@ def test_sharedctypes(self, lock=False): x = Value('i', 7, lock=lock) y = Value(c_double, 1.0/3.0, lock=lock) + z = Value(c_longlong, 2 ** 33, lock=lock) foo = Value(_Foo, 3, 2, lock=lock) arr = self.Array('d', list(range(10)), lock=lock) string = self.Array('c', 20, lock=lock) string.value = latin('hello') - p = self.Process(target=self._double, args=(x, y, foo, arr, string)) + p = self.Process(target=self._double, args=(x, y, z, foo, arr, string)) p.daemon = True p.start() p.join() self.assertEqual(x.value, 14) self.assertAlmostEqual(y.value, 2.0/3.0) + self.assertEqual(z.value, 2 ** 34) self.assertEqual(foo.x, 6) self.assertAlmostEqual(foo.y, 4.0) for i in range(10): @@ -2768,12 +2773,14 @@ self.test_sharedctypes(lock=True) def test_copy(self): - foo = _Foo(2, 5.0) + foo = _Foo(2, 5.0, 2 ** 33) bar = copy(foo) foo.x = 0 foo.y = 0 + foo.z = 0 self.assertEqual(bar.x, 2) self.assertAlmostEqual(bar.y, 5.0) + self.assertEqual(bar.z, 2 ** 33) # #