Rev 1882 | Rev 2030 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1882 | Rev 1888 | ||
|---|---|---|---|
| Line 372... | Line 372... | ||
| 372 | if (THREAD) { |
372 | if (THREAD) { |
| 373 | /* must be run after the switch to scheduler stack */ |
373 | /* must be run after the switch to scheduler stack */ |
| 374 | after_thread_ran(); |
374 | after_thread_ran(); |
| 375 | 375 | ||
| 376 | switch (THREAD->state) { |
376 | switch (THREAD->state) { |
| 377 | case Running: |
377 | case Running: |
| 378 | spinlock_unlock(&THREAD->lock); |
378 | spinlock_unlock(&THREAD->lock); |
| 379 | thread_ready(THREAD); |
379 | thread_ready(THREAD); |
| 380 | break; |
380 | break; |
| 381 | 381 | ||
| 382 | case Exiting: |
382 | case Exiting: |
| 383 | repeat: |
383 | repeat: |
| 384 | if (THREAD->detached) { |
384 | if (THREAD->detached) { |
| 385 | thread_destroy(THREAD); |
385 | thread_destroy(THREAD); |
| 386 | } else { |
386 | } else { |
| 387 | /* |
387 | /* |
| Line 403... | Line 403... | ||
| 403 | THREAD->state = Undead; |
403 | THREAD->state = Undead; |
| 404 | spinlock_unlock(&THREAD->lock); |
404 | spinlock_unlock(&THREAD->lock); |
| 405 | } |
405 | } |
| 406 | break; |
406 | break; |
| 407 | 407 | ||
| 408 | case Sleeping: |
408 | case Sleeping: |
| 409 | /* |
409 | /* |
| 410 | * Prefer the thread after it's woken up. |
410 | * Prefer the thread after it's woken up. |
| 411 | */ |
411 | */ |
| 412 | THREAD->priority = -1; |
412 | THREAD->priority = -1; |
| 413 | 413 | ||
| Line 428... | Line 428... | ||
| 428 | 428 | ||
| 429 | spinlock_unlock(&THREAD->lock); |
429 | spinlock_unlock(&THREAD->lock); |
| 430 | 430 | ||
| 431 | break; |
431 | break; |
| 432 | 432 | ||
| 433 | default: |
433 | default: |
| 434 | /* |
434 | /* |
| 435 | * Entering state is unexpected. |
435 | * Entering state is unexpected. |
| 436 | */ |
436 | */ |
| 437 | panic("tid%d: unexpected state %s\n", THREAD->tid, thread_states[THREAD->state]); |
437 | panic("tid%d: unexpected state %s\n", THREAD->tid, thread_states[THREAD->state]); |
| 438 | break; |
438 | break; |