https://github.com/python/cpython/commit/98e2c3af4794d6c6ebe47b20badbd31c542d944e
commit: 98e2c3af4794d6c6ebe47b20badbd31c542d944e
branch: main
author: Adam Turner <9087854+aa-tur...@users.noreply.github.com>
committer: AA-Turner <9087854+aa-tur...@users.noreply.github.com>
date: 2025-05-09T20:17:12Z
summary:

GH-132983: remove empty_bytes from _zstd module state (#133785)

files:
M Modules/_zstd/_zstdmodule.c
M Modules/_zstd/_zstdmodule.h
M Modules/_zstd/decompressor.c

diff --git a/Modules/_zstd/_zstdmodule.c b/Modules/_zstd/_zstdmodule.c
index 4004bbb3461393..1200d200ae0995 100644
--- a/Modules/_zstd/_zstdmodule.c
+++ b/Modules/_zstd/_zstdmodule.c
@@ -587,11 +587,6 @@ do {                                                       
                  \
     _zstd_state* const mod_state = get_zstd_state(m);
 
     /* Reusable objects & variables */
-    mod_state->empty_bytes = PyBytes_FromStringAndSize(NULL, 0);
-    if (mod_state->empty_bytes == NULL) {
-        return -1;
-    }
-
     mod_state->CParameter_type = NULL;
     mod_state->DParameter_type = NULL;
 
@@ -694,8 +689,6 @@ _zstd_traverse(PyObject *module, visitproc visit, void *arg)
 {
     _zstd_state* const mod_state = get_zstd_state(module);
 
-    Py_VISIT(mod_state->empty_bytes);
-
     Py_VISIT(mod_state->ZstdDict_type);
     Py_VISIT(mod_state->ZstdCompressor_type);
 
@@ -713,8 +706,6 @@ _zstd_clear(PyObject *module)
 {
     _zstd_state* const mod_state = get_zstd_state(module);
 
-    Py_CLEAR(mod_state->empty_bytes);
-
     Py_CLEAR(mod_state->ZstdDict_type);
     Py_CLEAR(mod_state->ZstdCompressor_type);
 
diff --git a/Modules/_zstd/_zstdmodule.h b/Modules/_zstd/_zstdmodule.h
index 58622a5cb48b5e..80f4e7e58d5265 100644
--- a/Modules/_zstd/_zstdmodule.h
+++ b/Modules/_zstd/_zstdmodule.h
@@ -35,8 +35,6 @@ extern PyType_Spec zstd_compressor_type_spec;
 extern PyType_Spec zstd_decompressor_type_spec;
 
 struct _zstd_state {
-    PyObject *empty_bytes;
-
     PyTypeObject *ZstdDict_type;
     PyTypeObject *ZstdCompressor_type;
     PyTypeObject *ZstdDecompressor_type;
diff --git a/Modules/_zstd/decompressor.c b/Modules/_zstd/decompressor.c
index d141e68efded26..b3d91e102859da 100644
--- a/Modules/_zstd/decompressor.c
+++ b/Modules/_zstd/decompressor.c
@@ -290,13 +290,7 @@ decompress_impl(ZstdDecompressor *self, ZSTD_inBuffer *in,
     /* The first AFE check for setting .at_frame_edge flag */
     if (type == TYPE_ENDLESS_DECOMPRESSOR) {
         if (self->at_frame_edge && in->pos == in->size) {
-            _zstd_state* const mod_state = 
PyType_GetModuleState(Py_TYPE(self));
-            if (mod_state == NULL) {
-                return NULL;
-            }
-            ret = mod_state->empty_bytes;
-            Py_INCREF(ret);
-            return ret;
+            return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
         }
     }
 
@@ -747,16 +741,8 @@ 
_zstd_ZstdDecompressor_unused_data_get_impl(ZstdDecompressor *self)
 {
     PyObject *ret;
 
-    /* Thread-safe code */
-    Py_BEGIN_CRITICAL_SECTION(self);
-
     if (!self->eof) {
-        _zstd_state* const mod_state = PyType_GetModuleState(Py_TYPE(self));
-        if (mod_state == NULL) {
-            return NULL;
-        }
-        ret = mod_state->empty_bytes;
-        Py_INCREF(ret);
+        return Py_GetConstant(Py_CONSTANT_EMPTY_BYTES);
     }
     else {
         if (self->unused_data == NULL) {
@@ -772,8 +758,6 @@ 
_zstd_ZstdDecompressor_unused_data_get_impl(ZstdDecompressor *self)
         }
     }
 
-    Py_END_CRITICAL_SECTION();
-
     return ret;
 }
 

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to