Skip to content

Commit 7768569

Browse files
authored
Merge pull request #607 from OneSignal/anr_fix
Fix ANR
2 parents 58827dc + 9eae4fb commit 7768569

File tree

1 file changed

+42
-31
lines changed

1 file changed

+42
-31
lines changed

OneSignalSDK/onesignal/src/main/java/com/onesignal/UserStateSynchronizer.java

Lines changed: 42 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,11 @@ protected JSONObject generateJsonDiff(JSONObject cur, JSONObject changedTo, JSON
119119
}
120120
}
121121

122-
protected synchronized UserState getToSyncUserState() {
123-
if (toSyncUserState == null)
124-
toSyncUserState = newUserState("TOSYNC_STATE", true);
122+
protected UserState getToSyncUserState() {
123+
synchronized (syncLock) {
124+
if (toSyncUserState == null)
125+
toSyncUserState = newUserState("TOSYNC_STATE", true);
126+
}
125127

126128
return toSyncUserState;
127129
}
@@ -163,7 +165,7 @@ private boolean syncEmailLogout() {
163165
return getToSyncUserState().dependValues.optBoolean("logoutEmail", false);
164166
}
165167

166-
synchronized void syncUserState(boolean fromSyncService) {
168+
void syncUserState(boolean fromSyncService) {
167169
runningSyncUserState.set(true);
168170
internalSyncUserState(fromSyncService);
169171
runningSyncUserState.set(false);
@@ -287,10 +289,12 @@ private void doPutSync(String userId, final JSONObject jsonBody, final JSONObjec
287289
void onFailure(int statusCode, String response, Throwable throwable) {
288290
OneSignal.Log(OneSignal.LOG_LEVEL.WARN, "Failed last request. statusCode: " + statusCode + "\nresponse: " + response);
289291

290-
if (response400WithErrorsContaining(statusCode, response, "No user with this id found"))
291-
handlePlayerDeletedFromServer();
292-
else
293-
handleNetworkFailure();
292+
synchronized (syncLock) {
293+
if (response400WithErrorsContaining(statusCode, response, "No user with this id found"))
294+
handlePlayerDeletedFromServer();
295+
else
296+
handleNetworkFailure();
297+
}
294298

295299
if (jsonBody.has("tags"))
296300
for (ChangeTagsUpdateHandler handler : tagsHandlers) {
@@ -303,8 +307,11 @@ void onFailure(int statusCode, String response, Throwable throwable) {
303307

304308
@Override
305309
void onSuccess(String response) {
306-
currentUserState.persistStateAfterSync(dependDiff, jsonBody);
307-
onSuccessfulSync(jsonBody);
310+
synchronized (syncLock) {
311+
currentUserState.persistStateAfterSync(dependDiff, jsonBody);
312+
onSuccessfulSync(jsonBody);
313+
}
314+
308315
JSONObject tags = OneSignalStateSynchronizer.getTags(false).result;
309316

310317
if (jsonBody.has("tags") && tags != null)
@@ -330,36 +337,40 @@ private void doCreateOrNewSession(final String userId, final JSONObject jsonBody
330337
OneSignalRestClient.postSync(urlStr, jsonBody, new OneSignalRestClient.ResponseHandler() {
331338
@Override
332339
void onFailure(int statusCode, String response, Throwable throwable) {
333-
waitingForSessionResponse = false;
334-
OneSignal.Log(OneSignal.LOG_LEVEL.WARN, "Failed last request. statusCode: " + statusCode + "\nresponse: " + response);
340+
synchronized (syncLock) {
341+
waitingForSessionResponse = false;
342+
OneSignal.Log(OneSignal.LOG_LEVEL.WARN, "Failed last request. statusCode: " + statusCode + "\nresponse: " + response);
335343

336-
if (response400WithErrorsContaining(statusCode, response, "not a valid device_type"))
337-
handlePlayerDeletedFromServer();
338-
else
339-
handleNetworkFailure();
344+
if (response400WithErrorsContaining(statusCode, response, "not a valid device_type"))
345+
handlePlayerDeletedFromServer();
346+
else
347+
handleNetworkFailure();
348+
}
340349
}
341350

342351
@Override
343352
void onSuccess(String response) {
344-
nextSyncIsSession = waitingForSessionResponse = false;
345-
currentUserState.persistStateAfterSync(dependDiff, jsonBody);
353+
synchronized (syncLock) {
354+
nextSyncIsSession = waitingForSessionResponse = false;
355+
currentUserState.persistStateAfterSync(dependDiff, jsonBody);
346356

347-
try {
348-
JSONObject jsonResponse = new JSONObject(response);
357+
try {
358+
JSONObject jsonResponse = new JSONObject(response);
349359

350-
if (jsonResponse.has("id")) {
351-
String newUserId = jsonResponse.optString("id");
352-
updateIdDependents(newUserId);
360+
if (jsonResponse.has("id")) {
361+
String newUserId = jsonResponse.optString("id");
362+
updateIdDependents(newUserId);
353363

354-
OneSignal.Log(OneSignal.LOG_LEVEL.INFO, "Device registered, UserId = " + newUserId);
355-
}
356-
else
357-
OneSignal.Log(OneSignal.LOG_LEVEL.INFO, "session sent, UserId = " + userId);
364+
OneSignal.Log(OneSignal.LOG_LEVEL.INFO, "Device registered, UserId = " + newUserId);
365+
}
366+
else
367+
OneSignal.Log(OneSignal.LOG_LEVEL.INFO, "session sent, UserId = " + userId);
358368

359-
OneSignal.updateOnSessionDependents();
360-
onSuccessfulSync(jsonBody);
361-
} catch (Throwable t) {
362-
OneSignal.Log(OneSignal.LOG_LEVEL.ERROR, "ERROR parsing on_session or create JSON Response.", t);
369+
OneSignal.updateOnSessionDependents();
370+
onSuccessfulSync(jsonBody);
371+
} catch (Throwable t) {
372+
OneSignal.Log(OneSignal.LOG_LEVEL.ERROR, "ERROR parsing on_session or create JSON Response.", t);
373+
}
363374
}
364375
}
365376
});

0 commit comments

Comments
 (0)