kopia lustrzana https://github.com/espressif/esp-idf
bugfix/pthread : pthread_detach implementation fixed to correctly delete pthread object when invoked after task completion
rodzic
1023ff73fb
commit
d816578e3a
|
@ -395,8 +395,19 @@ int pthread_detach(pthread_t thread)
|
||||||
TaskHandle_t handle = pthread_find_handle(thread);
|
TaskHandle_t handle = pthread_find_handle(thread);
|
||||||
if (!handle) {
|
if (!handle) {
|
||||||
ret = ESRCH;
|
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;
|
pthread->detached = true;
|
||||||
|
} else {
|
||||||
|
// pthread already stopped
|
||||||
|
pthread_delete(pthread);
|
||||||
|
vTaskDelete(handle);
|
||||||
}
|
}
|
||||||
xSemaphoreGive(s_threads_mux);
|
xSemaphoreGive(s_threads_mux);
|
||||||
ESP_LOGV(TAG, "%s %p EXIT %d", __FUNCTION__, pthread, ret);
|
ESP_LOGV(TAG, "%s %p EXIT %d", __FUNCTION__, pthread, ret);
|
||||||
|
|
Ładowanie…
Reference in New Issue