Merge branch 'bugfix/pthread_join_debug_log_v4.0' into 'release/v4.0'

pthread: Fix possible deadlock when using pthread_join() and Debug log level (v4.0)

See merge request espressif/esp-idf!13779
release/v4.0
Mahavir Jain 2021-07-12 11:23:21 +00:00
commit 190ef37994
1 zmienionych plików z 6 dodań i 2 usunięć

Wyświetl plik

@ -360,7 +360,7 @@ int pthread_join(pthread_t thread, void **retval)
if (pthread->state == PTHREAD_TASK_STATE_RUN) {
pthread->join_task = xTaskGetCurrentTaskHandle();
wait = true;
} else {
} else { // thread has exited and task is already suspended, or about to be suspended
child_task_retval = pthread->retval;
pthread_delete(pthread);
}
@ -451,10 +451,14 @@ void pthread_exit(void *value_ptr)
pthread->state = PTHREAD_TASK_STATE_EXIT;
}
}
xSemaphoreGive(s_threads_mux);
ESP_LOGD(TAG, "Task stk_wm = %d", uxTaskGetStackHighWaterMark(NULL));
xSemaphoreGive(s_threads_mux);
// note: if this thread is joinable then after giving back s_threads_mux
// this task could be deleted at any time, so don't take another lock or
// do anything that might lock (such as printing to stdout)
if (detached) {
vTaskDelete(NULL);
} else {