lwip: Add to sys_arch_protect() a check that the mutex is created before use if not then creates it

Closes: https://github.com/espressif/esp-idf/issues/944
Closes: https://github.com/espressif/esp-idf/issues/3931
Closes: WIFI-1019
This commit is contained in:
KonstantinKondrashov 2020-02-05 00:46:22 +08:00
parent 9cdbda325a
commit 5487700bf1

View file

@ -423,9 +423,11 @@ sys_thread_new(const char *name, lwip_thread_fn thread, void *arg, int stacksize
void void
sys_init(void) sys_init(void)
{ {
if (!g_lwip_protect_mutex) {
if (ERR_OK != sys_mutex_new(&g_lwip_protect_mutex)) { if (ERR_OK != sys_mutex_new(&g_lwip_protect_mutex)) {
ESP_LOGE(TAG, "sys_init: failed to init lwip protect mutex\n"); ESP_LOGE(TAG, "sys_init: failed to init lwip protect mutex\n");
} }
}
// Create the pthreads key for the per-thread semaphore storage // Create the pthreads key for the per-thread semaphore storage
pthread_key_create(&sys_thread_sem_key, sys_thread_sem_free); pthread_key_create(&sys_thread_sem_key, sys_thread_sem_free);
@ -465,6 +467,9 @@ sys_now(void)
sys_prot_t sys_prot_t
sys_arch_protect(void) sys_arch_protect(void)
{ {
if (unlikely(!g_lwip_protect_mutex)) {
sys_mutex_new(&g_lwip_protect_mutex);
}
sys_mutex_lock(&g_lwip_protect_mutex); sys_mutex_lock(&g_lwip_protect_mutex);
return (sys_prot_t) 1; return (sys_prot_t) 1;
} }