pussuw commented on code in PR #6197: URL: https://github.com/apache/incubator-nuttx/pull/6197#discussion_r880434797
########## arch/risc-v/src/esp32c3/esp32c3_wifi_adapter.c: ########## @@ -1339,20 +1340,23 @@ static int IRAM_ATTR wifi_is_in_isr(void) static void *esp_thread_semphr_get(void) { int ret; - int i; void *sem; - struct tcb_s *tcb = this_task(); - struct task_group_s *group = tcb->group; - for (i = 0; i < CONFIG_SCHED_EXIT_MAX; i++) + if (!g_wifi_tkey_init) { - if (group->tg_exit[i].func.on == esp_thread_semphr_free) + ret = tls_alloc(NULL); + if (ret < 0) { - break; + wlerr("Failed to create pthread key\n"); + return NULL; } + + g_wifi_thread_key = ret; + g_wifi_tkey_init = true; } - if (i >= CONFIG_SCHED_EXIT_MAX) + sem = (void *)tls_get_value(g_wifi_thread_key); Review Comment: According to an explanation by @donghengqaz (see above) the exit callback needs to be registered with on_exit() so it is called when the task terminates (via exit()), the pthread API destructor is invoked only when a pthread exits. Using TLS as storage here should be fine, as long as `ret = on_exit(esp_thread_semphr_free, sem);` is used. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org