]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-132551: add missing critical sections on BytesIO methods (#137073)
authorKumar Aditya <kumaraditya@python.org>
Thu, 24 Jul 2025 11:57:48 +0000 (17:27 +0530)
committerGitHub <noreply@github.com>
Thu, 24 Jul 2025 11:57:48 +0000 (11:57 +0000)
Modules/_io/bytesio.c
Modules/_io/clinic/bytesio.c.h

index 1c71bce4fbbc0c7ca0f7330e496beec844dee088..30d61f9d68e61018525786b97668d86583d1a344 100644 (file)
@@ -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;
index 8553ed05f70d1bb37abb4b3377f2599067ecdce5..6595dc937bbcf0f59fb59dc4d7ccf507129215e5 100644 (file)
@@ -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 @@ skip_optional_pos:
 exit:
     return return_value;
 }
-/*[clinic end generated code: output=580205daa01def2e input=a9049054013a1b77]*/
+/*[clinic end generated code: output=daa81dfdae5ccc57 input=a9049054013a1b77]*/