Browse Source

Merge pull request #412 from amirkhan5/master

Fix: using consistent synch primitives
Rod Hynes 8 years ago
parent
commit
ab8675e546
1 changed files with 8 additions and 8 deletions
  1. 8 8
      MobileLibrary/iOS/PsiphonTunnel/PsiphonTunnel/PsiphonTunnel.m

+ 8 - 8
MobileLibrary/iOS/PsiphonTunnel/PsiphonTunnel/PsiphonTunnel.m

@@ -46,10 +46,10 @@
     dispatch_queue_t callbackQueue;
     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;
     NetworkStatus previousNetworkStatus;
@@ -61,7 +61,7 @@
     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.
 }
 
@@ -89,7 +89,7 @@
     }
 
     self->initialDNSCache = [self getDNSServers];
-    self->useInitialDNS = [self->initialDNSCache count] > 0;
+    atomic_init(&self->useInitialDNS, [self->initialDNSCache count] > 0);
 
     return self;
 }
@@ -846,7 +846,7 @@
     // This function is only called when BindToDevice is used/supported.
     // TODO: Implement correctly
 
-    if (self->useInitialDNS) {
+    if (atomic_load(&self->useInitialDNS)) {
         return self->initialDNSCache[0];
     } else {
         return self->primaryGoogleDNS;
@@ -857,7 +857,7 @@
     // This function is only called when BindToDevice is used/supported.
     // TODO: Implement correctly
 
-    if (self->useInitialDNS && [self->initialDNSCache count] > 1) {
+    if (atomic_load(&self->useInitialDNS) && [self->initialDNSCache count] > 1) {
         return self->initialDNSCache[1];
     } else {
         return self->secondaryGoogleDNS;
@@ -1055,7 +1055,7 @@
 
 - (void)internetReachabilityChanged:(NSNotification *)note {
     // Invalidate initialDNSCache.
-    __sync_bool_compare_and_swap(&self->useInitialDNS, TRUE, FALSE);
+    atomic_store(&self->useInitialDNS, FALSE);
 
     Reachability* currentReachability = [note object];