xtensa/esp32: Fix leak of semaphores created by Wi-Fi kernel thread

Signed-off-by: Gustavo Henrique Nihei <gustavo.nihei@espressif.com>
This commit is contained in:
Gustavo Henrique Nihei 2022-05-24 12:43:38 -03:00 committed by Masayuki Ishikawa
parent 18d74dbea0
commit b4392f7323
18 changed files with 34 additions and 20 deletions

View File

@ -50,6 +50,7 @@
#include <nuttx/signal.h>
#include <nuttx/arch.h>
#include <nuttx/wireless/wireless.h>
#include <nuttx/tls.h>
#include "xtensa.h"
#include "xtensa_attr.h"
@ -374,11 +375,6 @@ void intr_matrix_set(int cpu_no, uint32_t model_num, uint32_t intr_num);
* Private Data
****************************************************************************/
/* Wi-Fi thread private data */
static pthread_key_t g_wifi_thread_key;
static bool g_wifi_tkey_init;
/* Wi-Fi event private data */
static struct work_s g_wifi_evt_work;
@ -1255,23 +1251,24 @@ static int IRAM_ATTR wifi_is_in_isr(void)
static void *esp_thread_semphr_get(void)
{
static int wifi_task_key = -1;
int ret;
void *sem;
if (g_wifi_tkey_init)
{
ret = pthread_key_create(&g_wifi_thread_key, esp_thread_semphr_free);
if (ret)
{
wlerr("Failed to create pthread key\n");
return NULL;
}
if (wifi_task_key < 0)
{
ret = task_tls_alloc(esp_thread_semphr_free);
if (ret < 0)
{
wlerr("Failed to create task local key\n");
return NULL;
}
g_wifi_tkey_init = true;
}
wifi_task_key = ret;
}
sem = pthread_getspecific(g_wifi_thread_key);
if (!sem)
sem = (void *)task_tls_get_value(wifi_task_key);
if (sem == NULL)
{
sem = esp_semphr_create(1, 0);
if (!sem)
@ -1280,10 +1277,10 @@ static void *esp_thread_semphr_get(void)
return NULL;
}
ret = pthread_setspecific(g_wifi_thread_key, sem);
if (ret)
ret = task_tls_set_value(wifi_task_key, (uintptr_t)sem);
if (ret != OK)
{
wlerr("Failed to set specific\n");
wlerr("Failed to save semaphore on task local storage: %d\n", ret);
esp_semphr_delete(sem);
return NULL;
}

View File

@ -71,6 +71,7 @@ CONFIG_START_YEAR=2011
CONFIG_SYSTEM_DHCPC_RENEW=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_PING=y
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y

View File

@ -56,6 +56,7 @@ CONFIG_START_DAY=6
CONFIG_START_MONTH=12
CONFIG_START_YEAR=2011
CONFIG_SYSTEM_NSH=y
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_BLUETOOTH=y

View File

@ -91,6 +91,7 @@ CONFIG_SYSTEM_PING=y
CONFIG_TASK_SPAWN_DEFAULT_STACKSIZE=2048
CONFIG_TELNET_CHARACTER_MODE=y
CONFIG_TELNET_IOTHREAD_STACKSIZE=2048
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_BLUETOOTH=y

View File

@ -129,6 +129,7 @@ CONFIG_SYSTEM_PING=y
CONFIG_TASK_SPAWN_DEFAULT_STACKSIZE=2048
CONFIG_TELNET_CHARACTER_MODE=y
CONFIG_TELNET_IOTHREAD_STACKSIZE=2048
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_BLUETOOTH=y

View File

@ -99,6 +99,7 @@ CONFIG_SYSTEM_STACKMONITOR=y
CONFIG_TASK_SPAWN_DEFAULT_STACKSIZE=2048
CONFIG_TELNET_CHARACTER_MODE=y
CONFIG_TELNET_IOTHREAD_STACKSIZE=2048
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y

View File

@ -79,6 +79,7 @@ CONFIG_START_YEAR=2011
CONFIG_SYSTEM_DHCPC_RENEW=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_PING=y
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y

View File

@ -77,6 +77,7 @@ CONFIG_START_YEAR=2011
CONFIG_SYSTEM_DHCPC_RENEW=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_PING=y
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y

View File

@ -78,6 +78,7 @@ CONFIG_START_YEAR=2011
CONFIG_SYSTEM_DHCPC_RENEW=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_PING=y
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y

View File

@ -96,6 +96,7 @@ CONFIG_SYSTEM_STACKMONITOR=y
CONFIG_TASK_SPAWN_DEFAULT_STACKSIZE=2048
CONFIG_TELNET_CHARACTER_MODE=y
CONFIG_TELNET_IOTHREAD_STACKSIZE=2048
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y

View File

@ -110,6 +110,7 @@ CONFIG_TELNET_IOTHREAD_STACKSIZE=1280
CONFIG_TESTING_GETPRIME=y
CONFIG_TESTING_OSTEST=y
CONFIG_TESTING_SMP=y
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y

View File

@ -81,6 +81,7 @@ CONFIG_START_YEAR=2011
CONFIG_SYSTEM_DHCPC_RENEW=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_PING=y
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y

View File

@ -70,6 +70,7 @@ CONFIG_START_YEAR=2011
CONFIG_SYSTEM_DHCPC_RENEW=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_PING=y
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y

View File

@ -77,6 +77,7 @@ CONFIG_START_YEAR=2011
CONFIG_SYSTEM_DHCPC_RENEW=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_PING=y
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y

View File

@ -69,6 +69,7 @@ CONFIG_START_YEAR=2011
CONFIG_SYSTEM_DHCPC_RENEW=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_PING=y
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y

View File

@ -71,6 +71,7 @@ CONFIG_START_YEAR=2011
CONFIG_SYSTEM_DHCPC_RENEW=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_PING=y
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y

View File

@ -78,6 +78,7 @@ CONFIG_START_YEAR=2011
CONFIG_SYSTEM_DHCPC_RENEW=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_PING=y
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y

View File

@ -70,6 +70,7 @@ CONFIG_START_YEAR=2011
CONFIG_SYSTEM_DHCPC_RENEW=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_PING=y
CONFIG_TLS_TASK_NELEM=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_WIRELESS=y
CONFIG_WIRELESS_WAPI=y