From 60c45d026907edbe340c8cf9e1723b3dd34f8b6a Mon Sep 17 00:00:00 2001 From: Hung-ying Tyan Date: Fri, 22 Oct 2010 09:01:49 +0800 Subject: Clean up pending sessions on incoming call in SipService Bug: 3122186 Change-Id: I25c9aa19d138f6940a29025d54e7bc2ffb7daa29 --- voip/java/com/android/server/sip/SipService.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'voip') diff --git a/voip/java/com/android/server/sip/SipService.java b/voip/java/com/android/server/sip/SipService.java index 84e0803..f480fec 100644 --- a/voip/java/com/android/server/sip/SipService.java +++ b/voip/java/com/android/server/sip/SipService.java @@ -441,13 +441,26 @@ public final class SipService extends ISipService.Stub { private synchronized void addPendingSession(ISipSession session) { try { + cleanUpPendingSessions(); mPendingSessions.put(session.getCallId(), session); + if (DEBUG) Log.d(TAG, "#pending sess=" + mPendingSessions.size()); } catch (RemoteException e) { // should not happen with a local call Log.e(TAG, "addPendingSession()", e); } } + private void cleanUpPendingSessions() throws RemoteException { + Map.Entry[] entries = + mPendingSessions.entrySet().toArray( + new Map.Entry[mPendingSessions.size()]); + for (Map.Entry entry : entries) { + if (entry.getValue().getState() != SipSession.State.INCOMING_CALL) { + mPendingSessions.remove(entry.getKey()); + } + } + } + private synchronized boolean callingSelf(SipSessionGroupExt ringingGroup, SipSessionGroup.SipSessionImpl ringingSession) { String callId = ringingSession.getCallId(); @@ -1095,8 +1108,6 @@ public final class SipService extends ISipService.Stub { } } - // TODO: clean up pending SipSession(s) periodically - /** * Timer that can schedule events to occur even when the device is in sleep. * Only used internally in this package. -- cgit v1.1