--- a/contrib/python-zstandard/c-ext/decompressobj.c Sat Apr 01 13:43:52 2017 -0700
+++ b/contrib/python-zstandard/c-ext/decompressobj.c Sat Apr 01 15:24:03 2017 -0700
@@ -15,11 +15,6 @@
);
static void DecompressionObj_dealloc(ZstdDecompressionObj* self) {
- if (self->dstream) {
- ZSTD_freeDStream(self->dstream);
- self->dstream = NULL;
- }
-
Py_XDECREF(self->decompressor);
PyObject_Del(self);
@@ -35,6 +30,9 @@
PyObject* result = NULL;
Py_ssize_t resultSize = 0;
+ /* Constructor should ensure stream is populated. */
+ assert(self->decompressor->dstream);
+
if (self->finished) {
PyErr_SetString(ZstdError, "cannot use a decompressobj multiple times");
return NULL;
@@ -64,7 +62,7 @@
/* Read input until exhausted. */
while (input.pos < input.size) {
Py_BEGIN_ALLOW_THREADS
- zresult = ZSTD_decompressStream(self->dstream, &output, &input);
+ zresult = ZSTD_decompressStream(self->decompressor->dstream, &output, &input);
Py_END_ALLOW_THREADS
if (ZSTD_isError(zresult)) {
@@ -106,8 +104,7 @@
goto finally;
except:
- Py_DecRef(result);
- result = NULL;
+ Py_CLEAR(result);
finally:
PyMem_Free(output.dst);