Index: kernel/generic/src/ipc/ipc.c
===================================================================
--- kernel/generic/src/ipc/ipc.c	(revision 3926f304505def449c2e06ef0f850cfc9d3ca437)
+++ kernel/generic/src/ipc/ipc.c	(revision 06d6505554331ae47f6a3959591e0b217bac938f)
@@ -509,5 +509,6 @@
 
 	/* Free unused call */
-	if (call) ipc_call_free(call);
+	if (call)
+		ipc_call_free(call);
 }
 
@@ -574,4 +575,9 @@
 		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);
Index: kernel/generic/src/ipc/sysipc.c
===================================================================
--- kernel/generic/src/ipc/sysipc.c	(revision 3926f304505def449c2e06ef0f850cfc9d3ca437)
+++ kernel/generic/src/ipc/sysipc.c	(revision 06d6505554331ae47f6a3959591e0b217bac938f)
@@ -823,10 +823,14 @@
 		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);
 		}
 
