Rev 3674 | Rev 4389 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3674 | Rev 4342 | ||
|---|---|---|---|
| Line 40... | Line 40... | ||
| 40 | #include <arch.h> |
40 | #include <arch.h> |
| 41 | #include <errno.h> |
41 | #include <errno.h> |
| 42 | #include <debug.h> |
42 | #include <debug.h> |
| 43 | #include <udebug/udebug_ipc.h> |
43 | #include <udebug/udebug_ipc.h> |
| 44 | #include <ipc/kbox.h> |
44 | #include <ipc/kbox.h> |
| - | 45 | #include <print.h> |
|
| 45 | 46 | ||
| 46 | void ipc_kbox_cleanup(void) |
47 | void ipc_kbox_cleanup(void) |
| 47 | { |
48 | { |
| 48 | ipl_t ipl; |
49 | ipl_t ipl; |
| 49 | bool have_kb_thread; |
50 | bool have_kb_thread; |
| Line 126... | Line 127... | ||
| 126 | IPC_SET_RETVAL(call->data, 0); |
127 | IPC_SET_RETVAL(call->data, 0); |
| 127 | ipc_answer(&TASK->kb.box, call); |
128 | ipc_answer(&TASK->kb.box, call); |
| 128 | 129 | ||
| 129 | ipl = interrupts_disable(); |
130 | ipl = interrupts_disable(); |
| 130 | spinlock_lock(&TASK->lock); |
131 | spinlock_lock(&TASK->lock); |
| 131 | spinlock_lock(&TASK->answerbox.lock); |
132 | spinlock_lock(&TASK->kb.box.lock); |
| 132 | if (list_empty(&TASK->answerbox.connected_phones)) { |
133 | if (list_empty(&TASK->kb.box.connected_phones)) { |
| 133 | /* |
134 | /* |
| 134 | * Last phone has been disconnected. Detach this thread so it |
135 | * Last phone has been disconnected. Detach this thread so it |
| 135 | * gets freed and signal to the caller. |
136 | * gets freed and signal to the caller. |
| 136 | */ |
137 | */ |
| 137 | 138 | ||
| Line 148... | Line 149... | ||
| 148 | *last = true; |
149 | *last = true; |
| 149 | } else { |
150 | } else { |
| 150 | *last = false; |
151 | *last = false; |
| 151 | } |
152 | } |
| 152 | 153 | ||
| 153 | spinlock_unlock(&TASK->answerbox.lock); |
154 | spinlock_unlock(&TASK->kb.box.lock); |
| 154 | spinlock_unlock(&TASK->lock); |
155 | spinlock_unlock(&TASK->lock); |
| 155 | interrupts_restore(ipl); |
156 | interrupts_restore(ipl); |
| 156 | } |
157 | } |
| 157 | 158 | ||
| 158 | /** Implementing function for the kbox thread. |
159 | /** Implementing function for the kbox thread. |