aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorqsr@chromium.org <qsr@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e>2012-11-28 17:04:52 +0000
committerqsr@chromium.org <qsr@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e>2012-11-28 17:04:52 +0000
commitac9324da7ad7c8dd9d42af608e3b2faf9723d56c (patch)
tree6491e185088608af3b6cef8510626a419e3d0fbf /src
parentFix unused variable warning in optimized build (fix proveded by Matthew Riley) (diff)
downloadbreakpad-ac9324da7ad7c8dd9d42af608e3b2faf9723d56c.tar.xz
Add assertion on initialization sequence.
The order at which to call the controller methods is: 1) Any method that change the configuration_ field 2) start 3) Any other method This change adds assertion that it is done correctly. Review URL: https://breakpad.appspot.com/499003 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1085 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src')
-rw-r--r--src/client/ios/BreakpadController.h4
-rw-r--r--src/client/ios/BreakpadController.mm20
2 files changed, 24 insertions, 0 deletions
diff --git a/src/client/ios/BreakpadController.h b/src/client/ios/BreakpadController.h
index 6eb826b3..f766100e 100644
--- a/src/client/ios/BreakpadController.h
+++ b/src/client/ios/BreakpadController.h
@@ -55,6 +55,10 @@
// Whether or not crash reports should be uploaded.
BOOL enableUploads_;
+ // Whether the controller has been started on the main thread. This is only
+ // used to assert the initialization order is correct.
+ BOOL started_;
+
// The interval to wait between two uploads. Value is 0 if no upload must be
// done.
int uploadIntervalInSeconds_;
diff --git a/src/client/ios/BreakpadController.mm b/src/client/ios/BreakpadController.mm
index 0c24e260..bf31647d 100644
--- a/src/client/ios/BreakpadController.mm
+++ b/src/client/ios/BreakpadController.mm
@@ -110,6 +110,7 @@ NSString* GetPlatform() {
queue_ = dispatch_queue_create("com.google.BreakpadQueue", NULL);
configuration_ = [[[NSBundle mainBundle] infoDictionary] mutableCopy];
enableUploads_ = NO;
+ started_ = NO;
NSString* uploadInterval =
[configuration_ valueForKey:@BREAKPAD_REPORT_INTERVAL];
[self setUploadInterval:[uploadInterval intValue]];
@@ -135,6 +136,8 @@ NSString* GetPlatform() {
BreakpadAddUploadParameter(breakpadRef_, @"platform", GetPlatform());
}
};
+ NSAssert(!started_, @"Start cannot be called more than once.");
+ started_ = YES;
if (onCurrentThread)
startBlock();
else
@@ -142,6 +145,9 @@ NSString* GetPlatform() {
}
- (void)stop {
+ NSAssert(started_,
+ @"The controller must be started before it can be stopped");
+ started_ = NO;
dispatch_sync(queue_, ^{
if (breakpadRef_) {
BreakpadRelease(breakpadRef_);
@@ -151,6 +157,8 @@ NSString* GetPlatform() {
}
- (void)setUploadingEnabled:(BOOL)enabled {
+ NSAssert(started_,
+ @"The controller must be started before setUploadingEnabled is called");
dispatch_async(queue_, ^{
if (enabled == enableUploads_)
return;
@@ -169,6 +177,8 @@ NSString* GetPlatform() {
}
- (void)updateConfiguration:(NSDictionary*)configuration {
+ NSAssert(!started_,
+ @"The controller must not be started when updateConfiguration is called");
[configuration_ addEntriesFromDictionary:configuration];
NSString* uploadInterval =
[configuration_ valueForKey:@BREAKPAD_REPORT_INTERVAL];
@@ -177,10 +187,14 @@ NSString* GetPlatform() {
}
- (void)setUploadingURL:(NSString*)url {
+ NSAssert(!started_,
+ @"The controller must not be started when setUploadingURL is called");
[configuration_ setValue:url forKey:@BREAKPAD_URL];
}
- (void)setUploadInterval:(int)intervalInSeconds {
+ NSAssert(!started_,
+ @"The controller must not be started when setUploadInterval is called");
[configuration_ removeObjectForKey:@BREAKPAD_REPORT_INTERVAL];
uploadIntervalInSeconds_ = intervalInSeconds;
if (uploadIntervalInSeconds_ < 0)
@@ -188,6 +202,8 @@ NSString* GetPlatform() {
}
- (void)addUploadParameter:(NSString*)value forKey:(NSString*)key {
+ NSAssert(started_,
+ @"The controller must be started before addUploadParameter is called");
dispatch_async(queue_, ^{
if (breakpadRef_)
BreakpadAddUploadParameter(breakpadRef_, key, value);
@@ -195,6 +211,8 @@ NSString* GetPlatform() {
}
- (void)removeUploadParameterForKey:(NSString*)key {
+ NSAssert(started_, @"The controller must be started before "
+ "removeUploadParameterForKey is called");
dispatch_async(queue_, ^{
if (breakpadRef_)
BreakpadRemoveUploadParameter(breakpadRef_, key);
@@ -202,6 +220,8 @@ NSString* GetPlatform() {
}
- (void)withBreakpadRef:(void(^)(BreakpadRef))callback {
+ NSAssert(started_,
+ @"The controller must be started before withBreakpadRef is called");
dispatch_async(queue_, ^{
callback(breakpadRef_);
});