Skip to content

Commit d37a8c6

Browse files
committed
Make read methods thread safe
1 parent 81d3ac6 commit d37a8c6

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

src/isal/isal_zlibmodule.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1274,7 +1274,7 @@ static void GzipReader_dealloc(GzipReader *self)
12741274
static PyObject *
12751275
GzipReader__new__(PyTypeObject *type, PyObject *args, PyObject *kwargs)
12761276
{
1277-
PyObject *fp;
1277+
PyObject *fp = NULL;
12781278
Py_ssize_t buffer_size = 32 * 1024;
12791279
static char *keywords[] = {"fp", "buffersize", NULL};
12801280
static char *format = "O|n:GzipReader";
@@ -1387,7 +1387,7 @@ GzipReader_read_into_buffer(GzipReader *self, uint8_t *out_buffer, size_t out_bu
13871387
while (1) {
13881388
uint8_t *current_pos = self->current_pos;
13891389
uint8_t *buffer_end = self->buffer_end;
1390-
switch (self->stream_phase) {
1390+
switch(self->stream_phase) {
13911391
case GzipReader_HEADER:
13921392
GzipReader_read_header:
13931393
size_t remaining = buffer_end - current_pos;
@@ -1563,7 +1563,9 @@ GzipReader_readinto(GzipReader *self, PyObject *buffer_obj)
15631563
}
15641564
uint8_t *buffer = view.buf;
15651565
size_t buffer_size = Py_MIN(view.len, UINT32_MAX);
1566+
ENTER_ZLIB(self);
15661567
ssize_t written_size = GzipReader_read_into_buffer(self, buffer, buffer_size);
1568+
LEAVE_ZLIB(self);
15671569
PyBuffer_Release(&view);
15681570
if (written_size < 0) {
15691571
return NULL;
@@ -1668,8 +1670,10 @@ GzipReader_readall(GzipReader *self, PyObject *Py_UNUSED(ignore))
16681670
if (first_chunk == NULL) {
16691671
return NULL;
16701672
}
1673+
ENTER_ZLIB(self);
16711674
ssize_t written_size = GzipReader_read_into_buffer(
16721675
self, (uint8_t *)PyBytes_AS_STRING(first_chunk), chunk_size);
1676+
LEAVE_ZLIB(self);
16731677
if (written_size < 0) {
16741678
Py_DECREF(first_chunk);
16751679
return NULL;
@@ -1692,8 +1696,10 @@ GzipReader_readall(GzipReader *self, PyObject *Py_UNUSED(ignore))
16921696
Py_DECREF(chunk_list);
16931697
return NULL;
16941698
}
1699+
ENTER_ZLIB(self);
16951700
written_size = GzipReader_read_into_buffer(
16961701
self, (uint8_t *)PyBytes_AS_STRING(chunk), chunk_size);
1702+
LEAVE_ZLIB(self);
16971703
if (written_size < 0) {
16981704
Py_DECREF(chunk);
16991705
Py_DECREF(chunk_list);
@@ -1740,7 +1746,9 @@ GzipReader_read(GzipReader *self, PyObject *args)
17401746
if (answer == NULL) {
17411747
return NULL;
17421748
}
1749+
ENTER_ZLIB(self);
17431750
ssize_t written_bytes = GzipReader_read_into_buffer(self, (uint8_t *)PyBytes_AS_STRING(answer), answer_size);
1751+
LEAVE_ZLIB(self);
17441752
if (written_bytes < 0) {
17451753
Py_DECREF(answer);
17461754
return NULL;

0 commit comments

Comments
 (0)