|
@@ -46,10 +46,10 @@
|
|
|
dispatch_queue_t callbackQueue;
|
|
dispatch_queue_t callbackQueue;
|
|
|
dispatch_semaphore_t noticeHandlingSemaphore;
|
|
dispatch_semaphore_t noticeHandlingSemaphore;
|
|
|
|
|
|
|
|
- _Atomic PsiphonConnectionState connectionState;
|
|
|
|
|
|
|
+ volatile _Atomic PsiphonConnectionState connectionState;
|
|
|
|
|
|
|
|
- _Atomic NSInteger localSocksProxyPort;
|
|
|
|
|
- _Atomic NSInteger localHttpProxyPort;
|
|
|
|
|
|
|
+ volatile _Atomic NSInteger localSocksProxyPort;
|
|
|
|
|
+ volatile _Atomic NSInteger localHttpProxyPort;
|
|
|
|
|
|
|
|
Reachability* reachability;
|
|
Reachability* reachability;
|
|
|
NetworkStatus previousNetworkStatus;
|
|
NetworkStatus previousNetworkStatus;
|
|
@@ -61,7 +61,7 @@
|
|
|
NSString *secondaryGoogleDNS;
|
|
NSString *secondaryGoogleDNS;
|
|
|
|
|
|
|
|
|
|
|
|
|
- volatile BOOL useInitialDNS; // initialDNSCache vailidity flag.
|
|
|
|
|
|
|
+ volatile _Atomic BOOL useInitialDNS; // initialDNSCache validity flag.
|
|
|
NSArray<NSString *> *initialDNSCache; // This cache becomes void if internetReachabilityChanged is called.
|
|
NSArray<NSString *> *initialDNSCache; // This cache becomes void if internetReachabilityChanged is called.
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -89,7 +89,7 @@
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
self->initialDNSCache = [self getDNSServers];
|
|
self->initialDNSCache = [self getDNSServers];
|
|
|
- self->useInitialDNS = [self->initialDNSCache count] > 0;
|
|
|
|
|
|
|
+ atomic_init(&self->useInitialDNS, [self->initialDNSCache count] > 0);
|
|
|
|
|
|
|
|
return self;
|
|
return self;
|
|
|
}
|
|
}
|
|
@@ -846,7 +846,7 @@
|
|
|
// This function is only called when BindToDevice is used/supported.
|
|
// This function is only called when BindToDevice is used/supported.
|
|
|
// TODO: Implement correctly
|
|
// TODO: Implement correctly
|
|
|
|
|
|
|
|
- if (self->useInitialDNS) {
|
|
|
|
|
|
|
+ if (atomic_load(&self->useInitialDNS)) {
|
|
|
return self->initialDNSCache[0];
|
|
return self->initialDNSCache[0];
|
|
|
} else {
|
|
} else {
|
|
|
return self->primaryGoogleDNS;
|
|
return self->primaryGoogleDNS;
|
|
@@ -857,7 +857,7 @@
|
|
|
// This function is only called when BindToDevice is used/supported.
|
|
// This function is only called when BindToDevice is used/supported.
|
|
|
// TODO: Implement correctly
|
|
// TODO: Implement correctly
|
|
|
|
|
|
|
|
- if (self->useInitialDNS && [self->initialDNSCache count] > 1) {
|
|
|
|
|
|
|
+ if (atomic_load(&self->useInitialDNS) && [self->initialDNSCache count] > 1) {
|
|
|
return self->initialDNSCache[1];
|
|
return self->initialDNSCache[1];
|
|
|
} else {
|
|
} else {
|
|
|
return self->secondaryGoogleDNS;
|
|
return self->secondaryGoogleDNS;
|
|
@@ -1055,7 +1055,7 @@
|
|
|
|
|
|
|
|
- (void)internetReachabilityChanged:(NSNotification *)note {
|
|
- (void)internetReachabilityChanged:(NSNotification *)note {
|
|
|
// Invalidate initialDNSCache.
|
|
// Invalidate initialDNSCache.
|
|
|
- __sync_bool_compare_and_swap(&self->useInitialDNS, TRUE, FALSE);
|
|
|
|
|
|
|
+ atomic_store(&self->useInitialDNS, FALSE);
|
|
|
|
|
|
|
|
Reachability* currentReachability = [note object];
|
|
Reachability* currentReachability = [note object];
|
|
|
|
|
|