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); |