Skip to content

Commit 035cb59

Browse files
committed
bring back self.obuf
1 parent 32ecf1e commit 035cb59

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

src/isal/isal_zlib.pyx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -412,11 +412,16 @@ cdef class Decompress:
412412
if err != COMP_OK:
413413
check_isal_deflate_rc(err)
414414
self.obuflen = DEF_BUF_SIZE
415+
self.obuf = <unsigned char *>PyMem_Malloc(self.obuflen * sizeof(char))
415416
self.unused_data = b""
416417
self.unconsumed_tail = b""
417418
self.eof = 0
418419
self.is_initialised = 1
419420

421+
def __dealloc__(self):
422+
if self.obuf is not NULL:
423+
PyMem_Free(self.obuf)
424+
420425
cdef save_unconsumed_input(self, Py_buffer *data):
421426
cdef Py_ssize_t old_size, new_size, left_size
422427
cdef bytes new_data
@@ -457,7 +462,6 @@ cdef class Decompress:
457462
cdef int err
458463

459464
# Initialise output buffer
460-
cdef unsigned char * obuf = <unsigned char*> PyMem_Malloc(self.obuflen * sizeof(char))
461465
out = []
462466

463467
cdef bint last_round = 0
@@ -467,7 +471,7 @@ cdef class Decompress:
467471
while True:
468472
arrange_input_buffer(&self.stream, &ibuflen)
469473
while (self.stream.avail_out == 0 or self.stream.avail_in != 0):
470-
self.stream.next_out = obuf # Reset output buffer.
474+
self.stream.next_out = self.obuf # Reset output buffer.
471475
if total_bytes >= max_length:
472476
break
473477
elif total_bytes + self.obuflen >= max_length:
@@ -486,15 +490,14 @@ cdef class Decompress:
486490
check_isal_inflate_rc(err)
487491
bytes_written = prev_avail_out - self.stream.avail_out
488492
total_bytes += bytes_written
489-
out.append(obuf[:bytes_written])
493+
out.append(self.obuf[:bytes_written])
490494
if self.stream.block_state == ISAL_BLOCK_FINISH or last_round:
491495
break
492496
if self.stream.block_state == ISAL_BLOCK_FINISH or ibuflen ==0:
493497
break
494498
self.save_unconsumed_input(buffer)
495499
return b"".join(out)
496500
finally:
497-
PyMem_Free(obuf)
498501
PyBuffer_Release(buffer)
499502

500503
def flush(self, Py_ssize_t length = DEF_BUF_SIZE):

0 commit comments

Comments
 (0)