@@ -4425,43 +4425,43 @@ sock_recvmsg_guts(PySocketSockObject *s, struct iovec *iov, int iovlen,
44254425static PyObject *
44264426makeval_recvmsg (ssize_t received , void * data )
44274427{
4428- PyObject * * buf = data ;
4429-
4430- if (received < PyBytes_GET_SIZE (* buf ))
4431- _PyBytes_Resize (buf , received );
4432- return Py_XNewRef (* buf );
4428+ PyBytesWriter * * writer = data ;
4429+ PyObject * buf = PyBytesWriter_FinishWithSize (* writer , received );
4430+ * writer = NULL ;
4431+ return buf ;
44334432}
44344433
44354434/* s.recvmsg(bufsize[, ancbufsize[, flags]]) method */
44364435
44374436static PyObject *
44384437sock_recvmsg (PyObject * self , PyObject * args )
44394438{
4440- PySocketSockObject * s = _PySocketSockObject_CAST (self );
4441-
44424439 Py_ssize_t bufsize , ancbufsize = 0 ;
44434440 int flags = 0 ;
4444- struct iovec iov ;
4445- PyObject * buf = NULL , * retval = NULL ;
4446-
44474441 if (!PyArg_ParseTuple (args , "n|ni:recvmsg" , & bufsize , & ancbufsize , & flags ))
44484442 return NULL ;
44494443
44504444 if (bufsize < 0 ) {
44514445 PyErr_SetString (PyExc_ValueError , "negative buffer size in recvmsg()" );
44524446 return NULL ;
44534447 }
4454- if ((buf = PyBytes_FromStringAndSize (NULL , bufsize )) == NULL )
4448+
4449+ PyBytesWriter * writer = PyBytesWriter_Create (bufsize );
4450+ if (writer == NULL ) {
44554451 return NULL ;
4456- iov .iov_base = PyBytes_AS_STRING (buf );
4452+ }
4453+ struct iovec iov ;
4454+ iov .iov_base = PyBytesWriter_GetData (writer );
44574455 iov .iov_len = bufsize ;
44584456
44594457 /* Note that we're passing a pointer to *our pointer* to the bytes
4460- object here (&buf); makeval_recvmsg() may incref the object, or
4461- deallocate it and set our pointer to NULL. */
4458+ writer (&writer); makeval_recvmsg() finish it and set our pointer to
4459+ NULL. */
4460+ PyObject * retval ;
4461+ PySocketSockObject * s = _PySocketSockObject_CAST (self );
44624462 retval = sock_recvmsg_guts (s , & iov , 1 , flags , ancbufsize ,
4463- & makeval_recvmsg , & buf );
4464- Py_XDECREF ( buf );
4463+ & makeval_recvmsg , & writer );
4464+ PyBytesWriter_Discard ( writer );
44654465 return retval ;
44664466}
44674467
0 commit comments