Rev 1684 | Rev 1702 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1684 | Rev 1687 | ||
---|---|---|---|
Line 298... | Line 298... | ||
298 | spinlock_lock(&ta->lock); |
298 | spinlock_lock(&ta->lock); |
299 | ta->accept_new_threads = false; |
299 | ta->accept_new_threads = false; |
300 | ta->refcount--; |
300 | ta->refcount--; |
301 | 301 | ||
302 | /* |
302 | /* |
303 | * Interrupt all threads except this one. |
303 | * Interrupt all threads except ktaskclnp. |
304 | */ |
304 | */ |
305 | for (cur = ta->th_head.next; cur != &ta->th_head; cur = cur->next) { |
305 | for (cur = ta->th_head.next; cur != &ta->th_head; cur = cur->next) { |
306 | thread_t *thr; |
306 | thread_t *thr; |
307 | bool sleeping = false; |
307 | bool sleeping = false; |
308 | 308 | ||
Line 465... | Line 465... | ||
465 | spinlock_lock(&TASK->lock); |
465 | spinlock_lock(&TASK->lock); |
466 | 466 | ||
467 | for (cur = TASK->th_head.next; cur != &TASK->th_head; cur = cur->next) { |
467 | for (cur = TASK->th_head.next; cur != &TASK->th_head; cur = cur->next) { |
468 | thr = list_get_instance(cur, thread_t, th_link); |
468 | thr = list_get_instance(cur, thread_t, th_link); |
469 | spinlock_lock(&thr->lock); |
469 | spinlock_lock(&thr->lock); |
470 | if (thr->state == Undead && thr->join_type == None) { |
470 | if (thr != t && thr->state == Undead && thr->join_type == None) { |
471 | thr->join_type = TaskGC; |
471 | thr->join_type = TaskGC; |
472 | spinlock_unlock(&thr->lock); |
472 | spinlock_unlock(&thr->lock); |
473 | break; |
473 | break; |
474 | } |
474 | } |
475 | spinlock_unlock(&thr->lock); |
475 | spinlock_unlock(&thr->lock); |