bpo-34521: Fix tests in test_multiprocessing_spawn to use correctly CMSG_SPACE (GH...
authorPablo Galindo <Pablogsal@gmail.com>
Fri, 28 Sep 2018 09:51:05 +0000 (10:51 +0100)
committerVictor Stinner <vstinner@redhat.com>
Fri, 28 Sep 2018 09:51:05 +0000 (02:51 -0700)
After some failures in AMD64 FreeBSD CURRENT Debug 3.x buildbots
regarding tests in test_multiprocessing_spawn and after examining
similar failures in test_socket, some errors in the calculation of
ancillary data buffers were found in multiprocessing.reduction.

CMSG_LEN() can often be used as the buffer size for recvmsg() to
receive a single item of ancillary data, but RFC 3542 requires portable
applications to use CMSG_SPACE() and thus include space for padding,
even when the item will be the last in the buffer.

The failures we experience are due to the usage of CMSG_LEN() instead of
CMSG_SPACE().

Lib/multiprocessing/reduction.py

index 473fd59df61b69833cace2ddae9b52d6fa194b8a..5593f0682f7fce3dc90402187c1fd404aa2f8a42 100644 (file)
@@ -154,7 +154,7 @@ else:
         '''Receive an array of fds over an AF_UNIX socket.'''
         a = array.array('i')
         bytes_size = a.itemsize * size
-        msg, ancdata, flags, addr = sock.recvmsg(1, socket.CMSG_LEN(bytes_size))
+        msg, ancdata, flags, addr = sock.recvmsg(1, socket.CMSG_SPACE(bytes_size))
         if not msg and not ancdata:
             raise EOFError
         try: