kore

a fork of the worlds most advanced web framework
Log | Files | Refs | README | LICENSE

commit 93b1d621d7fac629ddf8047f0e59f299710f5bc2
parent a4d18ca2760437195bace2194fc2aa12089e0b0c
Author: Joris Vink <joris@coders.se>
Date:   Wed,  5 Jun 2019 10:27:20 +0200

Remove memleak from Python httpclient.

We grab a reference to the pyhttp_client for the client_op data structure
but never removed it. This caused the pyhttp_client object to never
be released when out of scope.

Diffstat:
Minclude/kore/python_methods.h | 1+
Msrc/python.c | 2++
2 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/include/kore/python_methods.h b/include/kore/python_methods.h @@ -675,6 +675,7 @@ struct pyhttp_client_op { int headers; struct kore_curl curl; struct python_coro *coro; + struct pyhttp_client *client; }; static PyObject *pyhttp_client_op_await(PyObject *); diff --git a/src/python.c b/src/python.c @@ -4228,6 +4228,7 @@ pyhttp_client_request(struct pyhttp_client *client, int m, PyObject *kwargs) op->state = PYHTTP_CLIENT_OP_RUN; Py_INCREF(client); + op->client = client; kore_curl_http_setup(&op->curl, m, ptr, length); kore_curl_bind_callback(&op->curl, python_curl_callback, op); @@ -4302,6 +4303,7 @@ pyhttp_client_request(struct pyhttp_client *client, int m, PyObject *kwargs) static void pyhttp_client_op_dealloc(struct pyhttp_client_op *op) { + Py_DECREF(op->client); kore_curl_cleanup(&op->curl); PyObject_Del((PyObject *)op); }