Rev 2471 | Rev 2494 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2471 | Rev 2472 | ||
|---|---|---|---|
| Line 98... | Line 98... | ||
| 98 | { |
98 | { |
| 99 | _ipc_call_init(call); |
99 | _ipc_call_init(call); |
| 100 | call->flags |= IPC_CALL_STATIC_ALLOC; |
100 | call->flags |= IPC_CALL_STATIC_ALLOC; |
| 101 | } |
101 | } |
| 102 | 102 | ||
| 103 | /** Deallocate a call stracuture. |
103 | /** Deallocate a call structure. |
| 104 | * |
104 | * |
| 105 | * @param call Call structure to be freed. |
105 | * @param call Call structure to be freed. |
| 106 | */ |
106 | */ |
| 107 | void ipc_call_free(call_t *call) |
107 | void ipc_call_free(call_t *call) |
| 108 | { |
108 | { |
| Line 434... | Line 434... | ||
| 434 | restart_phones: |
434 | restart_phones: |
| 435 | spinlock_lock(&TASK->answerbox.lock); |
435 | spinlock_lock(&TASK->answerbox.lock); |
| 436 | while (!list_empty(&TASK->answerbox.connected_phones)) { |
436 | while (!list_empty(&TASK->answerbox.connected_phones)) { |
| 437 | phone = list_get_instance(TASK->answerbox.connected_phones.next, |
437 | phone = list_get_instance(TASK->answerbox.connected_phones.next, |
| 438 | phone_t, link); |
438 | phone_t, link); |
| 439 | if (! spinlock_trylock(&phone->lock)) { |
439 | if (!spinlock_trylock(&phone->lock)) { |
| 440 | spinlock_unlock(&TASK->answerbox.lock); |
440 | spinlock_unlock(&TASK->answerbox.lock); |
| 441 | DEADLOCK_PROBE(p_phonelck, DEADLOCK_THRESHOLD); |
441 | DEADLOCK_PROBE(p_phonelck, DEADLOCK_THRESHOLD); |
| 442 | goto restart_phones; |
442 | goto restart_phones; |
| 443 | } |
443 | } |
| 444 | 444 | ||
| Line 542... | Line 542... | ||
| 542 | task->phones[i].callee); |
542 | task->phones[i].callee); |
| 543 | break; |
543 | break; |
| 544 | default: |
544 | default: |
| 545 | break; |
545 | break; |
| 546 | } |
546 | } |
| - | 547 | printf("active: %d\n", |
|
| 547 | printf("active: %d\n", atomic_get(&task->phones[i].active_calls)); |
548 | atomic_get(&task->phones[i].active_calls)); |
| 548 | } |
549 | } |
| 549 | spinlock_unlock(&task->phones[i].lock); |
550 | spinlock_unlock(&task->phones[i].lock); |
| 550 | } |
551 | } |
| 551 | 552 | ||
| 552 | 553 | ||
| 553 | /* Print answerbox - calls */ |
554 | /* Print answerbox - calls */ |
| 554 | spinlock_lock(&task->answerbox.lock); |
555 | spinlock_lock(&task->answerbox.lock); |
| 555 | printf("ABOX - CALLS:\n"); |
556 | printf("ABOX - CALLS:\n"); |
| 556 | for (tmp=task->answerbox.calls.next; tmp != &task->answerbox.calls;tmp = tmp->next) { |
557 | for (tmp = task->answerbox.calls.next; tmp != &task->answerbox.calls; |
| - | 558 | tmp = tmp->next) { |
|
| 557 | call = list_get_instance(tmp, call_t, link); |
559 | call = list_get_instance(tmp, call_t, link); |
| 558 | printf("Callid: %p Srctask:%llu M:%d A1:%d A2:%d A3:%d Flags:%x\n",call, |
560 | printf("Callid: %p Srctask:%llu M:%d A1:%d A2:%d A3:%d " |
| - | 561 | "Flags:%x\n", call, call->sender->taskid, |
|
| 559 | call->sender->taskid, IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data), |
562 | IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data), |
| 560 | IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data), call->flags); |
563 | IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data), |
| - | 564 | call->flags); |
|
| 561 | } |
565 | } |
| 562 | /* Print answerbox - calls */ |
566 | /* Print answerbox - calls */ |
| 563 | printf("ABOX - DISPATCHED CALLS:\n"); |
567 | printf("ABOX - DISPATCHED CALLS:\n"); |
| 564 | for (tmp=task->answerbox.dispatched_calls.next; |
568 | for (tmp=task->answerbox.dispatched_calls.next; |
| 565 | tmp != &task->answerbox.dispatched_calls; |
569 | tmp != &task->answerbox.dispatched_calls; |
| 566 | tmp = tmp->next) { |
570 | tmp = tmp->next) { |
| 567 | call = list_get_instance(tmp, call_t, link); |
571 | call = list_get_instance(tmp, call_t, link); |
| 568 | printf("Callid: %p Srctask:%llu M:%d A1:%d A2:%d A3:%d Flags:%x\n",call, |
572 | printf("Callid: %p Srctask:%llu M:%d A1:%d A2:%d A3:%d " |
| - | 573 | "Flags:%x\n", call, call->sender->taskid, |
|
| 569 | call->sender->taskid, IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data), |
574 | IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data), |
| 570 | IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data), call->flags); |
575 | IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data), |
| - | 576 | call->flags); |
|
| 571 | } |
577 | } |
| 572 | /* Print answerbox - calls */ |
578 | /* Print answerbox - calls */ |
| 573 | printf("ABOX - ANSWERS:\n"); |
579 | printf("ABOX - ANSWERS:\n"); |
| 574 | for (tmp=task->answerbox.answers.next; tmp != &task->answerbox.answers; tmp = tmp->next) { |
580 | for (tmp = task->answerbox.answers.next; tmp != &task->answerbox.answers; |
| - | 581 | tmp = tmp->next) { |
|
| 575 | call = list_get_instance(tmp, call_t, link); |
582 | call = list_get_instance(tmp, call_t, link); |
| 576 | printf("Callid:%p M:%d A1:%d A2:%d A3:%d Flags:%x\n",call, |
583 | printf("Callid:%p M:%d A1:%d A2:%d A3:%d Flags:%x\n", call, |
| 577 | IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data), |
584 | IPC_GET_METHOD(call->data), IPC_GET_ARG1(call->data), |
| 578 | IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data), call->flags); |
585 | IPC_GET_ARG2(call->data), IPC_GET_ARG3(call->data), |
| - | 586 | call->flags); |
|
| 579 | } |
587 | } |
| 580 | 588 | ||
| 581 | spinlock_unlock(&task->answerbox.lock); |
589 | spinlock_unlock(&task->answerbox.lock); |
| 582 | spinlock_unlock(&task->lock); |
590 | spinlock_unlock(&task->lock); |
| 583 | } |
591 | } |