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>
This commit is contained in:
parent
ab4af2c1a6
commit
135c1cc7cd
1 changed files with 1 additions and 1 deletions
|
|
@ -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);
|
ret = mbedtls_ssl_setup(&o->ssl, &ssl_context->conf);
|
||||||
#if !MICROPY_MBEDTLS_CONFIG_BARE_METAL
|
#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
|
// 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
|
// 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
|
// it may free a Python object (like an old SSL socket) whose finaliser
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue