Skip to content

Commit 458eedb

Browse files
authored
Merge pull request #981 from OneSignal/fix/register_user_thread_safe_for_main
Register User Thread Safety Improvement
2 parents 930f62d + c84e3ac commit 458eedb

File tree

3 files changed

+5
-20
lines changed

3 files changed

+5
-20
lines changed

iOS_SDK/OneSignalSDK/Source/OneSignal.m

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,12 +1721,6 @@ + (void)registerUserAfterDelay {
17211721
[OneSignalHelper performSelector:@selector(registerUser) onMainThreadOnObject:self withObject:nil afterDelay:reattemptRegistrationInterval];
17221722
}
17231723

1724-
static dispatch_queue_t serialQueue;
1725-
1726-
+ (dispatch_queue_t)getRegisterQueue {
1727-
return serialQueue;
1728-
}
1729-
17301724
+ (void)registerUser {
17311725
// return if the user has not granted privacy permissions
17321726
if ([self shouldLogMissingPrivacyConsentErrorWithMethodName:nil])
@@ -1737,21 +1731,17 @@ + (void)registerUser {
17371731
return;
17381732
}
17391733

1740-
if (!serialQueue)
1741-
serialQueue = dispatch_queue_create("com.onesignal.regiseruser", DISPATCH_QUEUE_SERIAL);
1742-
17431734
[self registerUserNow];
17441735
}
17451736

17461737
+(void)registerUserNow {
17471738
[OneSignal onesignal_Log:ONE_S_LL_VERBOSE message:@"registerUserNow"];
1748-
1749-
if (!serialQueue)
1750-
serialQueue = dispatch_queue_create("com.onesignal.regiseruser", DISPATCH_QUEUE_SERIAL);
17511739

1752-
dispatch_async(serialQueue, ^{
1740+
// Run on the main queue as it is possible for this to be called from multiple queues.
1741+
// Also some of the code in the method is not thread safe such as _outcomeEventsController.
1742+
[OneSignalHelper dispatch_async_on_main_queue:^{
17531743
[self registerUserInternal];
1754-
});
1744+
}];
17551745
}
17561746

17571747
// We should delay registration if we are waiting on APNS

iOS_SDK/OneSignalSDK/UnitTests/UnitTestCommonMethods.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ withNotificationWillShowInForegroundHandler:(OSNotificationWillShowInForegroundB
8383

8484
// Expose OneSignal test methods
8585
@interface OneSignal (UN_extra)
86-
+ (dispatch_queue_t) getRegisterQueue;
8786
+ (void)setDelayIntervals:(NSTimeInterval)apnsMaxWait withRegistrationDelay:(NSTimeInterval)registrationDelay;
8887
@end
8988

iOS_SDK/OneSignalSDK/UnitTests/UnitTestCommonMethods.m

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -182,18 +182,14 @@ + (void)runBackgroundThreads {
182182

183183
+ (void)runThreadsOnEachQueue {
184184
// the httpQueue makes sure all HTTP request mocks are sync'ed
185-
dispatch_queue_t registerUserQueue, notifSettingsQueue;
185+
dispatch_queue_t notifSettingsQueue;
186186

187187
[OneSignalHelperOverrider runBackgroundThreads];
188188

189189
notifSettingsQueue = [OneSignalNotificationSettingsIOS10 getQueue];
190190
if (notifSettingsQueue)
191191
dispatch_sync(notifSettingsQueue, ^{});
192192

193-
registerUserQueue = [OneSignal getRegisterQueue];
194-
if (registerUserQueue)
195-
dispatch_sync(registerUserQueue, ^{});
196-
197193
[OneSignalClientOverrider runBackgroundThreads];
198194

199195
[UNUserNotificationCenterOverrider runBackgroundThreads];

0 commit comments

Comments
 (0)