summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/unix/mpthreadport.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/ports/unix/mpthreadport.c b/ports/unix/mpthreadport.c
index 7170379f4..4efa5925b 100644
--- a/ports/unix/mpthreadport.c
+++ b/ports/unix/mpthreadport.c
@@ -173,6 +173,11 @@ void mp_thread_create(void *(*entry)(void*), void *arg, size_t *stack_size) {
goto er;
}
+ ret = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+ if (ret != 0) {
+ goto er;
+ }
+
pthread_mutex_lock(&thread_mutex);
// create thread
@@ -205,12 +210,18 @@ er:
void mp_thread_finish(void) {
pthread_mutex_lock(&thread_mutex);
- // TODO unlink from list
+ thread_t *prev = NULL;
for (thread_t *th = thread; th != NULL; th = th->next) {
if (th->id == pthread_self()) {
- th->ready = 0;
+ if (prev == NULL) {
+ thread = th->next;
+ } else {
+ prev->next = th->next;
+ }
+ free(th);
break;
}
+ prev = th;
}
pthread_mutex_unlock(&thread_mutex);
}