Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(107)

Unified Diff: webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m

Issue 3009383002: Enhance RTCUIApplicationStatusObserver thread safety. (Closed)
Patch Set: Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m
diff --git a/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m b/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m
index 168832d9ed08a2653f2595f4f425203bde3d5f7a..84325b27f1616d5ec25dfa6e2d887ea57b141688 100644
--- a/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m
+++ b/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.m
@@ -19,6 +19,7 @@
@implementation RTCUIApplicationStatusObserver {
BOOL _initialized;
dispatch_block_t _initializeBlock;
+ dispatch_semaphore_t _waitForInitializeSemaphore;
UIApplicationState _state;
}
@@ -49,6 +50,7 @@
_state = [UIApplication sharedApplication].applicationState;
}];
+ _waitForInitializeSemaphore = dispatch_semaphore_create(1);
_initialized = NO;
_initializeBlock = dispatch_block_create(DISPATCH_BLOCK_INHERIT_QOS_CLASS, ^{
_state = [UIApplication sharedApplication].applicationState;
@@ -63,9 +65,13 @@
- (BOOL)isApplicationActive {
if (!_initialized) {
- long ret = dispatch_block_wait(_initializeBlock,
- dispatch_time(DISPATCH_TIME_NOW, 10.0 * NSEC_PER_SEC));
- RTC_DCHECK_EQ(ret, 0);
+ dispatch_semaphore_wait(_waitForInitializeSemaphore, DISPATCH_TIME_FOREVER);
daniela-webrtc 2017/09/13 09:02:50 This code is becoming slightly complex now. Would
andersc 2017/09/13 09:19:51 Acknowledged.
+ if (!_initialized) {
daniela-webrtc 2017/09/13 09:02:50 I guess we want to synchronize only if the observa
andersc 2017/09/13 09:19:51 Not sure what you mean. Since the `dispatch_block_
daniela-webrtc 2017/09/13 09:30:49 Acknowledged.
daniela-webrtc 2017/09/13 09:30:49 Missed that there were two if statements. The comm
+ long ret = dispatch_block_wait(_initializeBlock,
+ dispatch_time(DISPATCH_TIME_NOW, 10.0 * NSEC_PER_SEC));
+ RTC_DCHECK_EQ(ret, 0);
+ }
+ dispatch_semaphore_signal(_waitForInitializeSemaphore);
}
return _state == UIApplicationStateActive;
}

Powered by Google App Engine
This is Rietveld 408576698