Rev 2817 | Rev 3424 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2817 | Rev 3018 | ||
|---|---|---|---|
| Line 85... | Line 85... | ||
| 85 | */ |
85 | */ |
| 86 | void exc_dispatch(int n, istate_t *istate) |
86 | void exc_dispatch(int n, istate_t *istate) |
| 87 | { |
87 | { |
| 88 | ASSERT(n < IVT_ITEMS); |
88 | ASSERT(n < IVT_ITEMS); |
| 89 | 89 | ||
| 90 | if (THREAD) THREAD->uspace_state = istate; |
90 | if (THREAD) THREAD->udebug.uspace_state = istate; |
| 91 | 91 | ||
| 92 | exc_table[n].f(n + IVT_FIRST, istate); |
92 | exc_table[n].f(n + IVT_FIRST, istate); |
| 93 | 93 | ||
| 94 | if (THREAD) THREAD->uspace_state = NULL; |
94 | if (THREAD) THREAD->udebug.uspace_state = NULL; |
| 95 | 95 | ||
| 96 | /* This is a safe place to exit exiting thread */ |
96 | /* This is a safe place to exit exiting thread */ |
| 97 | if (THREAD && THREAD->interrupted && istate_from_uspace(istate)) |
97 | if (THREAD && THREAD->interrupted && istate_from_uspace(istate)) |
| 98 | thread_exit(); |
98 | thread_exit(); |
| 99 | } |
99 | } |