/trunk/kernel/generic/src/ipc/sysipc.c |
---|
822,12 → 822,16 |
ASSERT(! (call->flags & IPC_CALL_STATIC_ALLOC)); |
if (!(call->flags & IPC_CALL_DISCARD_ANSWER)) |
atomic_dec(&TASK->active_calls); |
if (call->flags & IPC_CALL_DISCARD_ANSWER) { |
ipc_call_free(call); |
goto restart; |
} else { |
/* |
* Decrement the counter of active calls only if the |
* call is not an answer to IPC_M_PHONE_HUNGUP, |
* which doesn't contribute to the counter. |
*/ |
atomic_dec(&TASK->active_calls); |
} |
STRUCT_TO_USPACE(&calldata->args, &call->data.args); |
/trunk/kernel/generic/src/ipc/ipc.c |
---|
508,7 → 508,8 |
interrupts_restore(ipl); |
/* Free unused call */ |
if (call) ipc_call_free(call); |
if (call) |
ipc_call_free(call); |
} |
/** Cleans up all IPC communication of the current task. |
573,6 → 574,11 |
(call->flags & IPC_CALL_NOTIF)); |
ASSERT(!(call->flags & IPC_CALL_STATIC_ALLOC)); |
/* |
* Record the receipt of this call in the current task's counter |
* of active calls. IPC_M_PHONE_HUNGUP calls do not contribute |
* to this counter so do not record answers to them either. |
*/ |
if (!(call->flags & IPC_CALL_DISCARD_ANSWER)) |
atomic_dec(&TASK->active_calls); |
ipc_call_free(call); |