Changes in kernel/generic/src/ipc/sysipc.c [97d17fe:fa3b8e4] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/ipc/sysipc.c
r97d17fe rfa3b8e4 644 644 } 645 645 646 /** Check that the task did not exceed the allowed limit of asynchronous calls 647 * made over a phone. 648 * 649 * @param phone Phone to check the limit against. 646 /** Check that the task did not exceed the allowed limit of asynchronous calls. 647 * 650 648 * @return 0 if limit not reached or -1 if limit exceeded. 651 649 * 652 650 */ 653 static int check_call_limit(phone_t *phone) 654 { 655 if (atomic_get(&phone->active_calls) >= IPC_MAX_ASYNC_CALLS) 651 static int check_call_limit(void) 652 { 653 if (atomic_preinc(&TASK->active_calls) > IPC_MAX_ASYNC_CALLS) { 654 atomic_dec(&TASK->active_calls); 656 655 return -1; 656 } 657 657 658 658 return 0; … … 680 680 unative_t arg1, unative_t arg2, unative_t arg3, unative_t arg4) 681 681 { 682 if (check_call_limit()) 683 return IPC_CALLRET_TEMPORARY; 684 682 685 phone_t *phone; 683 686 if (phone_get(phoneid, &phone) != EOK) 684 687 return IPC_CALLRET_FATAL; 685 686 if (check_call_limit(phone))687 return IPC_CALLRET_TEMPORARY;688 688 689 689 call_t *call = ipc_call_alloc(0); … … 720 720 unative_t sys_ipc_call_async_slow(unative_t phoneid, ipc_data_t *data) 721 721 { 722 if (check_call_limit()) 723 return IPC_CALLRET_TEMPORARY; 724 722 725 phone_t *phone; 723 726 if (phone_get(phoneid, &phone) != EOK) 724 727 return IPC_CALLRET_FATAL; 725 726 if (check_call_limit(phone))727 return IPC_CALLRET_TEMPORARY;728 728 729 729 call_t *call = ipc_call_alloc(0); … … 1046 1046 ipc_call_free(call); 1047 1047 goto restart; 1048 } else { 1049 /* 1050 * Decrement the counter of active calls only if the 1051 * call is not an answer to IPC_M_PHONE_HUNGUP, 1052 * which doesn't contribute to the counter. 1053 */ 1054 atomic_dec(&TASK->active_calls); 1048 1055 } 1049 1056
Note:
See TracChangeset
for help on using the changeset viewer.