Skip to content

Commit

Permalink
Update ssl_client.cpp (espressif#6942)
Browse files Browse the repository at this point in the history
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).

Co-authored-by: Me No Dev <[email protected]>
  • Loading branch information
Anx2k and me-no-dev authored Jul 6, 2022
1 parent 666c66d commit 949aa27
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions libraries/WiFiClientSecure/src/ssl_client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}
}
Expand Down Expand Up @@ -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;
}

Expand Down

0 comments on commit 949aa27

Please sign in to comment.