@@ -49,25 +49,27 @@ void addTaskToQueue(Runnable runnable) {
49
49
}
50
50
51
51
private void addTaskToQueue (PendingTaskRunnable task ) {
52
- task .taskId = lastTaskId .incrementAndGet ();
53
-
54
- if (pendingTaskExecutor == null ) {
55
- logger .debug ("Adding a task to the pending queue with ID: " + task .taskId );
56
- // The tasks haven't been executed yet...add them to the waiting queue
57
- taskQueueWaitingForInit .add (task );
58
- } else if (!pendingTaskExecutor .isShutdown ()) {
59
- logger .debug ("Executor is still running, add to the executor with ID: " + task .taskId );
60
- try {
61
- // If the executor isn't done with tasks, submit the task to the executor
62
- pendingTaskExecutor .submit (task );
63
- } catch (RejectedExecutionException e ) {
64
- logger .info ("Executor is shutdown, running task manually with ID: " + task .taskId );
65
- // Run task manually when RejectedExecutionException occurs due to the ThreadPoolExecutor.AbortPolicy
66
- // The pendingTaskExecutor is already shutdown by the time it tries to run the task
67
- // Issue #669
68
- // https://github.com/OneSignal/OneSignal-Android-SDK/issues/669
69
- task .run ();
70
- e .printStackTrace ();
52
+ synchronized (taskQueueWaitingForInit ) {
53
+ task .taskId = lastTaskId .incrementAndGet ();
54
+
55
+ if (pendingTaskExecutor == null ) {
56
+ logger .debug ("Adding a task to the pending queue with ID: " + task .taskId );
57
+ // The tasks haven't been executed yet...add them to the waiting queue
58
+ taskQueueWaitingForInit .add (task );
59
+ } else if (!pendingTaskExecutor .isShutdown ()) {
60
+ logger .debug ("Executor is still running, add to the executor with ID: " + task .taskId );
61
+ try {
62
+ // If the executor isn't done with tasks, submit the task to the executor
63
+ pendingTaskExecutor .submit (task );
64
+ } catch (RejectedExecutionException e ) {
65
+ logger .info ("Executor is shutdown, running task manually with ID: " + task .taskId );
66
+ // Run task manually when RejectedExecutionException occurs due to the ThreadPoolExecutor.AbortPolicy
67
+ // The pendingTaskExecutor is already shutdown by the time it tries to run the task
68
+ // Issue #669
69
+ // https://github.com/OneSignal/OneSignal-Android-SDK/issues/669
70
+ task .run ();
71
+ e .printStackTrace ();
72
+ }
71
73
}
72
74
}
73
75
}
@@ -77,19 +79,21 @@ private void addTaskToQueue(PendingTaskRunnable task) {
77
79
* Run available pending tasks on an Executor
78
80
*/
79
81
void startPendingTasks () {
80
- OneSignal .Log (OneSignal .LOG_LEVEL .DEBUG , "startPendingTasks with task queue quantity: " + taskQueueWaitingForInit .size ());
81
- if (!taskQueueWaitingForInit .isEmpty ()) {
82
- pendingTaskExecutor = Executors .newSingleThreadExecutor (new ThreadFactory () {
83
- @ Override
84
- public Thread newThread (@ NonNull Runnable runnable ) {
85
- Thread newThread = new Thread (runnable );
86
- newThread .setName (OS_PENDING_EXECUTOR + newThread .getId ());
87
- return newThread ;
82
+ synchronized (taskQueueWaitingForInit ) {
83
+ OneSignal .Log (OneSignal .LOG_LEVEL .DEBUG , "startPendingTasks with task queue quantity: " + taskQueueWaitingForInit .size ());
84
+ if (!taskQueueWaitingForInit .isEmpty ()) {
85
+ pendingTaskExecutor = Executors .newSingleThreadExecutor (new ThreadFactory () {
86
+ @ Override
87
+ public Thread newThread (@ NonNull Runnable runnable ) {
88
+ Thread newThread = new Thread (runnable );
89
+ newThread .setName (OS_PENDING_EXECUTOR + newThread .getId ());
90
+ return newThread ;
91
+ }
92
+ });
93
+
94
+ while (!taskQueueWaitingForInit .isEmpty ()) {
95
+ pendingTaskExecutor .submit (taskQueueWaitingForInit .poll ());
88
96
}
89
- });
90
-
91
- while (!taskQueueWaitingForInit .isEmpty ()) {
92
- pendingTaskExecutor .submit (taskQueueWaitingForInit .poll ());
93
97
}
94
98
}
95
99
}
@@ -102,7 +106,9 @@ private void onTaskRan(long taskId) {
102
106
}
103
107
104
108
ConcurrentLinkedQueue <Runnable > getTaskQueueWaitingForInit () {
105
- return taskQueueWaitingForInit ;
109
+ synchronized (taskQueueWaitingForInit ) {
110
+ return taskQueueWaitingForInit ;
111
+ }
106
112
}
107
113
108
114
void shutdownNow () {
0 commit comments