Rev 2071 | Rev 2216 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2071 | Rev 2183 | ||
|---|---|---|---|
| Line 372... | Line 372... | ||
| 372 | void ipc_cleanup(void) |
372 | void ipc_cleanup(void) |
| 373 | { |
373 | { |
| 374 | int i; |
374 | int i; |
| 375 | call_t *call; |
375 | call_t *call; |
| 376 | phone_t *phone; |
376 | phone_t *phone; |
| - | 377 | DEADLOCK_PROBE_INIT(p_phonelck); |
|
| 377 | 378 | ||
| 378 | /* Disconnect all our phones ('ipc_phone_hangup') */ |
379 | /* Disconnect all our phones ('ipc_phone_hangup') */ |
| 379 | for (i=0;i < IPC_MAX_PHONES; i++) |
380 | for (i=0;i < IPC_MAX_PHONES; i++) |
| 380 | ipc_phone_hangup(&TASK->phones[i]); |
381 | ipc_phone_hangup(&TASK->phones[i]); |
| 381 | 382 | ||
| Line 385... | Line 386... | ||
| 385 | /* Disconnect all phones connected to our answerbox */ |
386 | /* Disconnect all phones connected to our answerbox */ |
| 386 | restart_phones: |
387 | restart_phones: |
| 387 | spinlock_lock(&TASK->answerbox.lock); |
388 | spinlock_lock(&TASK->answerbox.lock); |
| 388 | while (!list_empty(&TASK->answerbox.connected_phones)) { |
389 | while (!list_empty(&TASK->answerbox.connected_phones)) { |
| 389 | phone = list_get_instance(TASK->answerbox.connected_phones.next, |
390 | phone = list_get_instance(TASK->answerbox.connected_phones.next, |
| 390 | phone_t, link); |
391 | phone_t, link); |
| 391 | if (! spinlock_trylock(&phone->lock)) { |
392 | if (! spinlock_trylock(&phone->lock)) { |
| 392 | spinlock_unlock(&TASK->answerbox.lock); |
393 | spinlock_unlock(&TASK->answerbox.lock); |
| - | 394 | DEADLOCK_PROBE(p_phonelck, DEADLOCK_THRESHOLD); |
|
| 393 | goto restart_phones; |
395 | goto restart_phones; |
| 394 | } |
396 | } |
| 395 | 397 | ||
| 396 | /* Disconnect phone */ |
398 | /* Disconnect phone */ |
| 397 | ASSERT(phone->state == IPC_PHONE_CONNECTED); |
399 | ASSERT(phone->state == IPC_PHONE_CONNECTED); |