@@ -4425,43 +4425,43 @@ sock_recvmsg_guts(PySocketSockObject *s, struct iovec *iov, int iovlen,
4425
4425
static PyObject *
4426
4426
makeval_recvmsg (ssize_t received , void * data )
4427
4427
{
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 ;
4433
4432
}
4434
4433
4435
4434
/* s.recvmsg(bufsize[, ancbufsize[, flags]]) method */
4436
4435
4437
4436
static PyObject *
4438
4437
sock_recvmsg (PyObject * self , PyObject * args )
4439
4438
{
4440
- PySocketSockObject * s = _PySocketSockObject_CAST (self );
4441
-
4442
4439
Py_ssize_t bufsize , ancbufsize = 0 ;
4443
4440
int flags = 0 ;
4444
- struct iovec iov ;
4445
- PyObject * buf = NULL , * retval = NULL ;
4446
-
4447
4441
if (!PyArg_ParseTuple (args , "n|ni:recvmsg" , & bufsize , & ancbufsize , & flags ))
4448
4442
return NULL ;
4449
4443
4450
4444
if (bufsize < 0 ) {
4451
4445
PyErr_SetString (PyExc_ValueError , "negative buffer size in recvmsg()" );
4452
4446
return NULL ;
4453
4447
}
4454
- if ((buf = PyBytes_FromStringAndSize (NULL , bufsize )) == NULL )
4448
+
4449
+ PyBytesWriter * writer = PyBytesWriter_Create (bufsize );
4450
+ if (writer == NULL ) {
4455
4451
return NULL ;
4456
- iov .iov_base = PyBytes_AS_STRING (buf );
4452
+ }
4453
+ struct iovec iov ;
4454
+ iov .iov_base = PyBytesWriter_GetData (writer );
4457
4455
iov .iov_len = bufsize ;
4458
4456
4459
4457
/* 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 );
4462
4462
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 );
4465
4465
return retval ;
4466
4466
}
4467
4467
0 commit comments