Merge "Fix potential exceptions in CallDiagnosticService and missing locks." into sc-dev
This commit is contained in:
@@ -294,6 +294,10 @@ public abstract class CallDiagnosticService extends Service {
|
|||||||
CallDiagnostics callDiagnostics;
|
CallDiagnostics callDiagnostics;
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
callDiagnostics = mDiagnosticCallByTelecomCallId.get(telecomCallId);
|
callDiagnostics = mDiagnosticCallByTelecomCallId.get(telecomCallId);
|
||||||
|
if (callDiagnostics == null) {
|
||||||
|
// Possible to get a call update after a call is removed.
|
||||||
|
return;
|
||||||
|
}
|
||||||
mCallByTelecomCallId.put(telecomCallId, newCallDetails);
|
mCallByTelecomCallId.put(telecomCallId, newCallDetails);
|
||||||
}
|
}
|
||||||
getExecutor().execute(() -> callDiagnostics.handleCallUpdated(newCallDetails));
|
getExecutor().execute(() -> callDiagnostics.handleCallUpdated(newCallDetails));
|
||||||
@@ -306,12 +310,12 @@ public abstract class CallDiagnosticService extends Service {
|
|||||||
private void handleCallRemoved(@NonNull String telecomCallId) {
|
private void handleCallRemoved(@NonNull String telecomCallId) {
|
||||||
Log.i(this, "handleCallRemoved: callId=%s - removed", telecomCallId);
|
Log.i(this, "handleCallRemoved: callId=%s - removed", telecomCallId);
|
||||||
|
|
||||||
|
CallDiagnostics callDiagnostics;
|
||||||
|
synchronized (mLock) {
|
||||||
if (mCallByTelecomCallId.containsKey(telecomCallId)) {
|
if (mCallByTelecomCallId.containsKey(telecomCallId)) {
|
||||||
mCallByTelecomCallId.remove(telecomCallId);
|
mCallByTelecomCallId.remove(telecomCallId);
|
||||||
}
|
}
|
||||||
|
|
||||||
CallDiagnostics callDiagnostics;
|
|
||||||
synchronized (mLock) {
|
|
||||||
if (mDiagnosticCallByTelecomCallId.containsKey(telecomCallId)) {
|
if (mDiagnosticCallByTelecomCallId.containsKey(telecomCallId)) {
|
||||||
callDiagnostics = mDiagnosticCallByTelecomCallId.remove(telecomCallId);
|
callDiagnostics = mDiagnosticCallByTelecomCallId.remove(telecomCallId);
|
||||||
} else {
|
} else {
|
||||||
@@ -353,7 +357,10 @@ public abstract class CallDiagnosticService extends Service {
|
|||||||
private void handleCallDisconnected(@NonNull String callId,
|
private void handleCallDisconnected(@NonNull String callId,
|
||||||
@NonNull DisconnectCause disconnectCause) {
|
@NonNull DisconnectCause disconnectCause) {
|
||||||
Log.i(this, "handleCallDisconnected: call=%s; cause=%s", callId, disconnectCause);
|
Log.i(this, "handleCallDisconnected: call=%s; cause=%s", callId, disconnectCause);
|
||||||
CallDiagnostics callDiagnostics = mDiagnosticCallByTelecomCallId.get(callId);
|
CallDiagnostics callDiagnostics;
|
||||||
|
synchronized (mLock) {
|
||||||
|
callDiagnostics = mDiagnosticCallByTelecomCallId.get(callId);
|
||||||
|
}
|
||||||
CharSequence message;
|
CharSequence message;
|
||||||
if (disconnectCause.getImsReasonInfo() != null) {
|
if (disconnectCause.getImsReasonInfo() != null) {
|
||||||
message = callDiagnostics.onCallDisconnected(disconnectCause.getImsReasonInfo());
|
message = callDiagnostics.onCallDisconnected(disconnectCause.getImsReasonInfo());
|
||||||
@@ -391,7 +398,9 @@ public abstract class CallDiagnosticService extends Service {
|
|||||||
@NonNull CallQuality callQuality) {
|
@NonNull CallQuality callQuality) {
|
||||||
Log.i(this, "handleCallQualityChanged; call=%s, cq=%s", callId, callQuality);
|
Log.i(this, "handleCallQualityChanged; call=%s, cq=%s", callId, callQuality);
|
||||||
CallDiagnostics callDiagnostics;
|
CallDiagnostics callDiagnostics;
|
||||||
|
synchronized(mLock) {
|
||||||
callDiagnostics = mDiagnosticCallByTelecomCallId.get(callId);
|
callDiagnostics = mDiagnosticCallByTelecomCallId.get(callId);
|
||||||
|
}
|
||||||
if (callDiagnostics != null) {
|
if (callDiagnostics != null) {
|
||||||
callDiagnostics.onCallQualityReceived(callQuality);
|
callDiagnostics.onCallQualityReceived(callQuality);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user