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:
parent
18d74dbea0
commit
b4392f7323
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user