https://github.com/python/cpython/commit/d8fa40b08da60a711311751891fa830cb4ae77f3
commit: d8fa40b08da60a711311751891fa830cb4ae77f3
branch: main
author: Kumar Aditya <[email protected]>
committer: kumaraditya303 <[email protected]>
date: 2025-07-24T11:57:48Z
summary:

gh-132551: add missing critical sections on BytesIO methods (#137073)

files:
M Modules/_io/bytesio.c
M Modules/_io/clinic/bytesio.c.h

diff --git a/Modules/_io/bytesio.c b/Modules/_io/bytesio.c
index 1c71bce4fbbc0c..30d61f9d68e610 100644
--- a/Modules/_io/bytesio.c
+++ b/Modules/_io/bytesio.c
@@ -270,6 +270,7 @@ bytesio_get_closed(PyObject *op, void *Py_UNUSED(closure))
 }
 
 /*[clinic input]
+@critical_section
 _io.BytesIO.readable
 
 Returns True if the IO object can be read.
@@ -277,13 +278,14 @@ Returns True if the IO object can be read.
 
 static PyObject *
 _io_BytesIO_readable_impl(bytesio *self)
-/*[clinic end generated code: output=4e93822ad5b62263 input=96c5d0cccfb29f5c]*/
+/*[clinic end generated code: output=4e93822ad5b62263 input=ab7816facef48bfd]*/
 {
     CHECK_CLOSED(self);
     Py_RETURN_TRUE;
 }
 
 /*[clinic input]
+@critical_section
 _io.BytesIO.writable
 
 Returns True if the IO object can be written.
@@ -291,13 +293,14 @@ Returns True if the IO object can be written.
 
 static PyObject *
 _io_BytesIO_writable_impl(bytesio *self)
-/*[clinic end generated code: output=64ff6a254b1150b8 input=700eed808277560a]*/
+/*[clinic end generated code: output=64ff6a254b1150b8 input=4f35d49d26dab024]*/
 {
     CHECK_CLOSED(self);
     Py_RETURN_TRUE;
 }
 
 /*[clinic input]
+@critical_section
 _io.BytesIO.seekable
 
 Returns True if the IO object can be seeked.
@@ -305,13 +308,14 @@ Returns True if the IO object can be seeked.
 
 static PyObject *
 _io_BytesIO_seekable_impl(bytesio *self)
-/*[clinic end generated code: output=6b417f46dcc09b56 input=9421f65627a344dd]*/
+/*[clinic end generated code: output=6b417f46dcc09b56 input=9cc78d15aa1deaa3]*/
 {
     CHECK_CLOSED(self);
     Py_RETURN_TRUE;
 }
 
 /*[clinic input]
+@critical_section
 _io.BytesIO.flush
 
 Does nothing.
@@ -319,7 +323,7 @@ Does nothing.
 
 static PyObject *
 _io_BytesIO_flush_impl(bytesio *self)
-/*[clinic end generated code: output=187e3d781ca134a0 input=561ea490be4581a7]*/
+/*[clinic end generated code: output=187e3d781ca134a0 input=c60842743910b381]*/
 {
     CHECK_CLOSED(self);
     Py_RETURN_NONE;
@@ -385,6 +389,7 @@ _io_BytesIO_getvalue_impl(bytesio *self)
 }
 
 /*[clinic input]
+@critical_section
 _io.BytesIO.isatty
 
 Always returns False.
@@ -394,7 +399,7 @@ BytesIO objects are not connected to a TTY-like device.
 
 static PyObject *
 _io_BytesIO_isatty_impl(bytesio *self)
-/*[clinic end generated code: output=df67712e669f6c8f input=6f97f0985d13f827]*/
+/*[clinic end generated code: output=df67712e669f6c8f input=50487b74dc5ae8a9]*/
 {
     CHECK_CLOSED(self);
     Py_RETURN_FALSE;
diff --git a/Modules/_io/clinic/bytesio.c.h b/Modules/_io/clinic/bytesio.c.h
index 8553ed05f70d1b..6595dc937bbcf0 100644
--- a/Modules/_io/clinic/bytesio.c.h
+++ b/Modules/_io/clinic/bytesio.c.h
@@ -25,7 +25,13 @@ _io_BytesIO_readable_impl(bytesio *self);
 static PyObject *
 _io_BytesIO_readable(PyObject *self, PyObject *Py_UNUSED(ignored))
 {
-    return _io_BytesIO_readable_impl((bytesio *)self);
+    PyObject *return_value = NULL;
+
+    Py_BEGIN_CRITICAL_SECTION(self);
+    return_value = _io_BytesIO_readable_impl((bytesio *)self);
+    Py_END_CRITICAL_SECTION();
+
+    return return_value;
 }
 
 PyDoc_STRVAR(_io_BytesIO_writable__doc__,
@@ -43,7 +49,13 @@ _io_BytesIO_writable_impl(bytesio *self);
 static PyObject *
 _io_BytesIO_writable(PyObject *self, PyObject *Py_UNUSED(ignored))
 {
-    return _io_BytesIO_writable_impl((bytesio *)self);
+    PyObject *return_value = NULL;
+
+    Py_BEGIN_CRITICAL_SECTION(self);
+    return_value = _io_BytesIO_writable_impl((bytesio *)self);
+    Py_END_CRITICAL_SECTION();
+
+    return return_value;
 }
 
 PyDoc_STRVAR(_io_BytesIO_seekable__doc__,
@@ -61,7 +73,13 @@ _io_BytesIO_seekable_impl(bytesio *self);
 static PyObject *
 _io_BytesIO_seekable(PyObject *self, PyObject *Py_UNUSED(ignored))
 {
-    return _io_BytesIO_seekable_impl((bytesio *)self);
+    PyObject *return_value = NULL;
+
+    Py_BEGIN_CRITICAL_SECTION(self);
+    return_value = _io_BytesIO_seekable_impl((bytesio *)self);
+    Py_END_CRITICAL_SECTION();
+
+    return return_value;
 }
 
 PyDoc_STRVAR(_io_BytesIO_flush__doc__,
@@ -79,7 +97,13 @@ _io_BytesIO_flush_impl(bytesio *self);
 static PyObject *
 _io_BytesIO_flush(PyObject *self, PyObject *Py_UNUSED(ignored))
 {
-    return _io_BytesIO_flush_impl((bytesio *)self);
+    PyObject *return_value = NULL;
+
+    Py_BEGIN_CRITICAL_SECTION(self);
+    return_value = _io_BytesIO_flush_impl((bytesio *)self);
+    Py_END_CRITICAL_SECTION();
+
+    return return_value;
 }
 
 PyDoc_STRVAR(_io_BytesIO_getbuffer__doc__,
@@ -152,7 +176,13 @@ _io_BytesIO_isatty_impl(bytesio *self);
 static PyObject *
 _io_BytesIO_isatty(PyObject *self, PyObject *Py_UNUSED(ignored))
 {
-    return _io_BytesIO_isatty_impl((bytesio *)self);
+    PyObject *return_value = NULL;
+
+    Py_BEGIN_CRITICAL_SECTION(self);
+    return_value = _io_BytesIO_isatty_impl((bytesio *)self);
+    Py_END_CRITICAL_SECTION();
+
+    return return_value;
 }
 
 PyDoc_STRVAR(_io_BytesIO_tell__doc__,
@@ -607,4 +637,4 @@ _io_BytesIO___init__(PyObject *self, PyObject *args, 
PyObject *kwargs)
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=580205daa01def2e input=a9049054013a1b77]*/
+/*[clinic end generated code: output=daa81dfdae5ccc57 input=a9049054013a1b77]*/

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to