release-request-dabd8cf7-7af2-48e9-a296-ccc6a71cc25d-for-git_oc-m2-release-4328410 snap-temp-L55300000101694322

Change-Id: I13647420b3816b6bed2ded16d778165b311bd309
diff --git a/src/java/com/android/ims/ImsCall.java b/src/java/com/android/ims/ImsCall.java
index 716687d..c5e6368 100644
--- a/src/java/com/android/ims/ImsCall.java
+++ b/src/java/com/android/ims/ImsCall.java
@@ -1319,13 +1319,28 @@
         logi("merge :: ");
 
         synchronized(mLockObj) {
+            // If the host of the merge is in the midst of some other operation, we cannot merge.
             if (mUpdateRequest != UPDATE_NONE) {
+                setCallSessionMergePending(false);
+                if (mMergePeer != null) {
+                    mMergePeer.setCallSessionMergePending(false);
+                }
                 loge("merge :: update is in progress; request=" +
                         updateRequestToString(mUpdateRequest));
                 throw new ImsException("Call update is in progress",
                         ImsReasonInfo.CODE_LOCAL_ILLEGAL_STATE);
             }
 
+            // The peer of the merge is in the midst of some other operation, we cannot merge.
+            if (mMergePeer != null && mMergePeer.mUpdateRequest != UPDATE_NONE) {
+                setCallSessionMergePending(false);
+                mMergePeer.setCallSessionMergePending(false);
+                loge("merge :: peer call update is in progress; request=" +
+                        updateRequestToString(mMergePeer.mUpdateRequest));
+                throw new ImsException("Peer call update is in progress",
+                        ImsReasonInfo.CODE_LOCAL_ILLEGAL_STATE);
+            }
+
             if (mSession == null) {
                 loge("merge :: no call session");
                 throw new ImsException("No call session",