Rev 3362 | Rev 3370 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3362 | Rev 3363 | ||
---|---|---|---|
Line 193... | Line 193... | ||
193 | { |
193 | { |
194 | answerbox_t *callerbox = call->callerbox; |
194 | answerbox_t *callerbox = call->callerbox; |
195 | 195 | ||
196 | call->flags |= IPC_CALL_ANSWERED; |
196 | call->flags |= IPC_CALL_ANSWERED; |
197 | 197 | ||
- | 198 | if (call->flags & IPC_CALL_FORWARDED) { |
|
- | 199 | if (call->data.caller_phone) { |
|
- | 200 | /* Demasquerade the caller phone. */ |
|
- | 201 | call->data.phone = call->data.caller_phone; |
|
- | 202 | } |
|
- | 203 | } |
|
- | 204 | ||
198 | spinlock_lock(&callerbox->lock); |
205 | spinlock_lock(&callerbox->lock); |
199 | list_append(&call->link, &callerbox->answers); |
206 | list_append(&call->link, &callerbox->answers); |
200 | spinlock_unlock(&callerbox->lock); |
207 | spinlock_unlock(&callerbox->lock); |
201 | waitq_wakeup(&callerbox->wq, WAKEUP_FIRST); |
208 | waitq_wakeup(&callerbox->wq, WAKEUP_FIRST); |
202 | } |
209 | } |
Line 393... | Line 400... | ||
393 | interrupts_restore(ipl); |
400 | interrupts_restore(ipl); |
394 | } else if (!list_empty(&box->answers)) { |
401 | } else if (!list_empty(&box->answers)) { |
395 | /* Handle asynchronous answers */ |
402 | /* Handle asynchronous answers */ |
396 | request = list_get_instance(box->answers.next, call_t, link); |
403 | request = list_get_instance(box->answers.next, call_t, link); |
397 | list_remove(&request->link); |
404 | list_remove(&request->link); |
398 | if (request->data.caller_phone) |
- | |
399 | atomic_dec(&request->data.caller_phone->active_calls); |
- | |
400 | else |
- | |
401 | atomic_dec(&request->data.phone->active_calls); |
405 | atomic_dec(&request->data.phone->active_calls); |
402 | } else if (!list_empty(&box->calls)) { |
406 | } else if (!list_empty(&box->calls)) { |
403 | /* Handle requests */ |
407 | /* Handle requests */ |
404 | request = list_get_instance(box->calls.next, call_t, link); |
408 | request = list_get_instance(box->calls.next, call_t, link); |
405 | list_remove(&request->link); |
409 | list_remove(&request->link); |
406 | /* Append request to dispatch queue */ |
410 | /* Append request to dispatch queue */ |