From 524e2bf526604becec031beff1cdcf9490cf20f0 Mon Sep 17 00:00:00 2001 From: Anx2k <35139253+Anx2k@users.noreply.github.com> Date: Mon, 4 Jul 2022 21:57:10 -0700 Subject: [PATCH] Update ssl_client.cpp Fixed issue with ssl_client->socket being closed without being consistently set to -1. Changed close to lwip_close to be consistent with lwip_socket, resolved issue with long term assert after 4+ days (assert failed: lock_release_generic locks.c:186). --- libraries/WiFiClientSecure/src/ssl_client.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/libraries/WiFiClientSecure/src/ssl_client.cpp b/libraries/WiFiClientSecure/src/ssl_client.cpp index 6ab9b10570d..c3ba6ad633b 100644 --- a/libraries/WiFiClientSecure/src/ssl_client.cpp +++ b/libraries/WiFiClientSecure/src/ssl_client.cpp @@ -100,18 +100,21 @@ int start_ssl_client(sslclient_context *ssl_client, const char *host, uint32_t p int res = lwip_connect(ssl_client->socket, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); if (res < 0 && errno != EINPROGRESS) { log_e("connect on fd %d, errno: %d, \"%s\"", ssl_client->socket, errno, strerror(errno)); - close(ssl_client->socket); + lwip_close(ssl_client->socket); + ssl_client->socket = -1; return -1; } res = select(ssl_client->socket + 1, nullptr, &fdset, nullptr, timeout<0 ? nullptr : &tv); if (res < 0) { log_e("select on fd %d, errno: %d, \"%s\"", ssl_client->socket, errno, strerror(errno)); - close(ssl_client->socket); + lwip_close(ssl_client->socket); + ssl_client->socket = -1; return -1; } else if (res == 0) { log_i("select returned due to timeout %d ms for fd %d", timeout, ssl_client->socket); - close(ssl_client->socket); + lwip_close(ssl_client->socket); + ssl_client->socket = -1; return -1; } else { int sockerr; @@ -120,13 +123,15 @@ int start_ssl_client(sslclient_context *ssl_client, const char *host, uint32_t p if (res < 0) { log_e("getsockopt on fd %d, errno: %d, \"%s\"", ssl_client->socket, errno, strerror(errno)); - close(ssl_client->socket); + lwip_close(ssl_client->socket); + ssl_client->socket = -1; return -1; } if (sockerr != 0) { log_e("socket error on fd %d, errno: %d, \"%s\"", ssl_client->socket, sockerr, strerror(sockerr)); - close(ssl_client->socket); + lwip_close(ssl_client->socket); + ssl_client->socket = -1; return -1; } } @@ -319,7 +324,7 @@ void stop_ssl_socket(sslclient_context *ssl_client, const char *rootCABuff, cons log_v("Cleaning SSL connection."); if (ssl_client->socket >= 0) { - close(ssl_client->socket); + lwip_close(ssl_client->socket); ssl_client->socket = -1; }