Skip to content

Commit ef581d2

Browse files
committed
In OSTaskController switch to LinkedBlockingQueue
Android 12 has a bug where ConcurrentLinkedQueue.poll() can return the wrong value. This is rare but results in a few crash reports in OSTaskController, see issue #1761. To workaround this issue we switched to LinkedBlockingQueue.
1 parent 74c0d20 commit ef581d2

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
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
}

0 commit comments

Comments
 (0)