diff options
author | Damien George <damien@micropython.org> | 2025-07-23 14:44:11 +1000 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2025-07-31 10:46:47 +1000 |
commit | 135c1cc7cd6077eda2dc860b3b7b51d742f6f630 (patch) | |
tree | 57c18769e4d620f7dd9f8c91ab3d01f9d42a2c03 | |
parent | ab4af2c1a61550cd300ff8dcd57fce6099f3338e (diff) |
extmod/modtls_mbedtls: Do gc_collect and retry ssl_init on any error.
Contrary to the docs, mbedtls can return more than just
MBEDTLS_ERR_SSL_ALLOC_FAILED when `mbedtls_ssl_setup()` fails. At least
MBEDTLS_ERR_MD_ALLOC_FAILED was also seen on ESP32_GENERIC, but there
could possibly be other error codes.
To cover all these codes, just check if `ret` is non-0, and in that case
do a `gc_collect()` and retry the init.
Signed-off-by: Damien George <damien@micropython.org>
-rw-r--r-- | extmod/modtls_mbedtls.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/extmod/modtls_mbedtls.c b/extmod/modtls_mbedtls.c index 418275440..586342573 100644 --- a/extmod/modtls_mbedtls.c +++ b/extmod/modtls_mbedtls.c @@ -639,7 +639,7 @@ static mp_obj_t ssl_socket_make_new(mp_obj_ssl_context_t *ssl_context, mp_obj_t ret = mbedtls_ssl_setup(&o->ssl, &ssl_context->conf); #if !MICROPY_MBEDTLS_CONFIG_BARE_METAL - if (ret == MBEDTLS_ERR_SSL_ALLOC_FAILED) { + if (ret != 0) { // If mbedTLS relies on platform libc heap for buffers (i.e. esp32 // port), then run a GC pass and then try again. This is useful because // it may free a Python object (like an old SSL socket) whose finaliser |