bugfix/pthread : pthread_detach implementation fixed to correctly delete pthread object when invoked after task completion

pull/2917/head
Anurag Kar 2018-12-27 18:32:14 +05:30
rodzic 1023ff73fb
commit d816578e3a
1 zmienionych plików z 12 dodań i 1 usunięć

Wyświetl plik

@ -395,8 +395,19 @@ int pthread_detach(pthread_t thread)
TaskHandle_t handle = pthread_find_handle(thread);
if (!handle) {
ret = ESRCH;
} else {
} else if (pthread->detached) {
// already detached
ret = EINVAL;
} else if (pthread->join_task) {
// already have waiting task to join
ret = EINVAL;
} else if (pthread->state == PTHREAD_TASK_STATE_RUN) {
// pthread still running
pthread->detached = true;
} else {
// pthread already stopped
pthread_delete(pthread);
vTaskDelete(handle);
}
xSemaphoreGive(s_threads_mux);
ESP_LOGV(TAG, "%s %p EXIT %d", __FUNCTION__, pthread, ret);