Skip to content

Commit 711f468

Browse files
authored
Merge pull request #2062 from OneSignal/fix/android-12-concurrentlinkedqueue-workaround
[Player Model] Fix OSTaskController crashing on LinkedBlockingQueue.poll() on Android 12
2 parents 74c0d20 + 93676f3 commit 711f468

File tree

3 files changed

+11
-12
lines changed

3 files changed

+11
-12
lines changed

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22

33
import androidx.annotation.NonNull;
44

5-
import java.util.Arrays;
6-
import java.util.HashSet;
7-
import java.util.concurrent.ConcurrentLinkedQueue;
5+
import java.util.Queue;
86
import java.util.concurrent.ExecutorService;
97
import java.util.concurrent.Executors;
8+
import java.util.concurrent.LinkedBlockingQueue;
109
import java.util.concurrent.RejectedExecutionException;
1110
import java.util.concurrent.ThreadFactory;
1211
import java.util.concurrent.atomic.AtomicLong;
@@ -15,8 +14,8 @@ class OSTaskController {
1514

1615
static final String OS_PENDING_EXECUTOR = "OS_PENDING_EXECUTOR_";
1716

18-
// The concurrent queue in which we pin pending tasks upon finishing initialization
19-
private final ConcurrentLinkedQueue<Runnable> taskQueueWaitingForInit = new ConcurrentLinkedQueue<>();
17+
// The queue in which we pin pending tasks upon finishing initialization
18+
private final Queue<Runnable> taskQueueWaitingForInit = new LinkedBlockingQueue<>();
2019
private final AtomicLong lastTaskId = new AtomicLong();
2120
private ExecutorService pendingTaskExecutor;
2221

@@ -105,7 +104,7 @@ private void onTaskRan(long taskId) {
105104
}
106105
}
107106

108-
ConcurrentLinkedQueue<Runnable> getTaskQueueWaitingForInit() {
107+
Queue<Runnable> getTaskQueueWaitingForInit() {
109108
synchronized (taskQueueWaitingForInit) {
110109
return taskQueueWaitingForInit;
111110
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import java.util.HashMap;
1919
import java.util.Queue;
2020
import java.util.Set;
21-
import java.util.concurrent.ConcurrentLinkedQueue;
21+
import java.util.concurrent.LinkedBlockingQueue;
2222
import java.util.concurrent.atomic.AtomicBoolean;
2323

2424
import static com.onesignal.OSInAppMessageController.IN_APP_MESSAGES_JSON_KEY;
@@ -93,9 +93,9 @@ String getRegistrationId() {
9393

9494
// Maintain a list of handlers so that if the user calls
9595
// sendTags() multiple times it will call each callback
96-
final private Queue<ChangeTagsUpdateHandler> sendTagsHandlers = new ConcurrentLinkedQueue<>();
97-
final private Queue<OneSignal.OSInternalExternalUserIdUpdateCompletionHandler> externalUserIdUpdateHandlers = new ConcurrentLinkedQueue<>();
98-
final private Queue<OSDeviceInfoCompletionHandler> deviceInfoCompletionHandler = new ConcurrentLinkedQueue<>();
96+
final private Queue<ChangeTagsUpdateHandler> sendTagsHandlers = new LinkedBlockingQueue<>();
97+
final private Queue<OneSignal.OSInternalExternalUserIdUpdateCompletionHandler> externalUserIdUpdateHandlers = new LinkedBlockingQueue<>();
98+
final private Queue<OSDeviceInfoCompletionHandler> deviceInfoCompletionHandler = new LinkedBlockingQueue<>();
9999

100100
boolean hasQueuedHandlers() {
101101
return externalUserIdUpdateHandlers.size() > 0;

OneSignalSDK/unittest/src/test/java/com/onesignal/OneSignalPackagePrivateHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
import java.util.ArrayList;
2323
import java.util.List;
2424
import java.util.Map;
25+
import java.util.Queue;
2526
import java.util.Set;
26-
import java.util.concurrent.ConcurrentLinkedQueue;
2727

2828
import static com.test.onesignal.TestHelpers.threadAndTaskWait;
2929
import static org.robolectric.Shadows.shadowOf;
@@ -295,7 +295,7 @@ public static DelayedConsentInitializationParameters OneSignal_delayedInitParams
295295
return OneSignal.getDelayedInitParams();
296296
}
297297

298-
public static ConcurrentLinkedQueue<Runnable> OneSignal_taskQueueWaitingForInit() {
298+
public static Queue<Runnable> OneSignal_taskQueueWaitingForInit() {
299299
return OneSignal.getTaskRemoteController().getTaskQueueWaitingForInit();
300300
}
301301

0 commit comments

Comments
 (0)