aboutsummaryrefslogtreecommitdiff
path: root/extmod/modussl_axtls.c
diff options
context:
space:
mode:
authorEric Poulsen <eric@zyxod.com>2017-10-26 21:17:35 -0700
committerDamien George <damien.p.george@gmail.com>2017-10-30 15:25:32 +1100
commit74ec52d85758ad9da7a3abb24257511b22d74964 (patch)
tree82f9cf6249d74aa5b06fa9fb6f1242038db25104 /extmod/modussl_axtls.c
parent05a2bb888f9cd3dc3e005b8eea4258e20a39cba2 (diff)
extmod/modussl: Add finaliser support for ussl objects.
Per the comment found here https://github.com/micropython/micropython-esp32/issues/209#issuecomment-339855157, this patch adds finaliser code to prevent memory leaks from ussl objects, which is especially useful when memory for a ussl context is allocated outside the uPy heap. This patch is in-line with the finaliser code found in many modsocket implementations for various ports. This feature is configured via MICROPY_PY_USSL_FINALISER and is disabled by default because there may be issues using it when the ussl state *is* allocated on the uPy heap, rather than externally.
Diffstat (limited to 'extmod/modussl_axtls.c')
-rw-r--r--extmod/modussl_axtls.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/extmod/modussl_axtls.c b/extmod/modussl_axtls.c
index 719a65cd1..3ad65ebf3 100644
--- a/extmod/modussl_axtls.c
+++ b/extmod/modussl_axtls.c
@@ -51,7 +51,11 @@ struct ssl_args {
STATIC const mp_obj_type_t ussl_socket_type;
STATIC mp_obj_ssl_socket_t *socket_new(mp_obj_t sock, struct ssl_args *args) {
+#if MICROPY_PY_USSL_FINALISER
+ mp_obj_ssl_socket_t *o = m_new_obj_with_finaliser(mp_obj_ssl_socket_t);
+#else
mp_obj_ssl_socket_t *o = m_new_obj(mp_obj_ssl_socket_t);
+#endif
o->base.type = &ussl_socket_type;
o->buf = NULL;
o->bytes_left = 0;
@@ -178,6 +182,9 @@ STATIC const mp_rom_map_elem_t ussl_socket_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&mp_stream_write_obj) },
{ MP_ROM_QSTR(MP_QSTR_setblocking), MP_ROM_PTR(&socket_setblocking_obj) },
{ MP_ROM_QSTR(MP_QSTR_close), MP_ROM_PTR(&socket_close_obj) },
+#if MICROPY_PY_USSL_FINALISER
+ { MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&socket_close_obj) },
+#endif
};
STATIC MP_DEFINE_CONST_DICT(ussl_socket_locals_dict, ussl_socket_locals_dict_table);