Add lock around progress updates and cancel to iphone attempting to access zombie data
Showing
3 changed files
with
27 additions
and
5 deletions
@@ -112,6 +112,9 @@ | @@ -112,6 +112,9 @@ | ||
112 | //This lock will block the request until the delegate supplies authentication info | 112 | //This lock will block the request until the delegate supplies authentication info |
113 | NSConditionLock *authenticationLock; | 113 | NSConditionLock *authenticationLock; |
114 | 114 | ||
115 | + //This lock prevents the operation from being cancelled while it is trying to update the progress, and vice versa | ||
116 | + NSLock *progressLock; | ||
117 | + | ||
115 | //Called on the delegate when the request completes successfully | 118 | //Called on the delegate when the request completes successfully |
116 | SEL didFinishSelector; | 119 | SEL didFinishSelector; |
117 | 120 |
@@ -85,6 +85,7 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy | @@ -85,6 +85,7 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy | ||
85 | [domain release]; | 85 | [domain release]; |
86 | [authenticationRealm release]; | 86 | [authenticationRealm release]; |
87 | [url release]; | 87 | [url release]; |
88 | + [progressLock release]; | ||
88 | [authenticationLock release]; | 89 | [authenticationLock release]; |
89 | [lastActivityTime release]; | 90 | [lastActivityTime release]; |
90 | [responseCookies release]; | 91 | [responseCookies release]; |
@@ -118,6 +119,13 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy | @@ -118,6 +119,13 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy | ||
118 | return complete; | 119 | return complete; |
119 | } | 120 | } |
120 | 121 | ||
122 | +- (void)cancel | ||
123 | +{ | ||
124 | + [progressLock lock]; | ||
125 | + [super cancel]; | ||
126 | + [progressLock unlock]; | ||
127 | +} | ||
128 | + | ||
121 | - (int)totalBytesRead | 129 | - (int)totalBytesRead |
122 | { | 130 | { |
123 | return totalBytesRead; | 131 | return totalBytesRead; |
@@ -206,6 +214,9 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy | @@ -206,6 +214,9 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy | ||
206 | - (void)loadRequest | 214 | - (void)loadRequest |
207 | { | 215 | { |
208 | CFRunLoopAddCommonMode(CFRunLoopGetCurrent(),ASIHTTPRequestRunMode); | 216 | CFRunLoopAddCommonMode(CFRunLoopGetCurrent(),ASIHTTPRequestRunMode); |
217 | + | ||
218 | + [progressLock release]; | ||
219 | + progressLock = [[NSLock alloc] init]; | ||
209 | 220 | ||
210 | [authenticationLock release]; | 221 | [authenticationLock release]; |
211 | authenticationLock = [[NSConditionLock alloc] initWithCondition:1]; | 222 | authenticationLock = [[NSConditionLock alloc] initWithCondition:1]; |
@@ -321,8 +332,14 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy | @@ -321,8 +332,14 @@ static void ReadStreamClientCallBack(CFReadStreamRef readStream, CFStreamEventTy | ||
321 | 332 | ||
322 | - (void)updateProgressIndicators | 333 | - (void)updateProgressIndicators |
323 | { | 334 | { |
335 | + [progressLock lock]; | ||
336 | + if ([self isCancelled]) { | ||
337 | + [progressLock unlock]; | ||
338 | + return; | ||
339 | + } | ||
324 | [self updateUploadProgress]; | 340 | [self updateUploadProgress]; |
325 | [self updateDownloadProgress]; | 341 | [self updateDownloadProgress]; |
342 | + [progressLock unlock]; | ||
326 | 343 | ||
327 | } | 344 | } |
328 | 345 |
@@ -30,15 +30,17 @@ | @@ -30,15 +30,17 @@ | ||
30 | <object class="IBUILabel" id="602749642"> | 30 | <object class="IBUILabel" id="602749642"> |
31 | <reference key="NSNextResponder" ref="191373211"/> | 31 | <reference key="NSNextResponder" ref="191373211"/> |
32 | <int key="NSvFlags">292</int> | 32 | <int key="NSvFlags">292</int> |
33 | - <string key="NSFrame">{{20, 20}, {280, 105}}</string> | 33 | + <string key="NSFrame">{{20, 20}, {280, 144}}</string> |
34 | <reference key="NSSuperview" ref="191373211"/> | 34 | <reference key="NSSuperview" ref="191373211"/> |
35 | <bool key="IBUIOpaque">NO</bool> | 35 | <bool key="IBUIOpaque">NO</bool> |
36 | <bool key="IBUIClipsSubviews">YES</bool> | 36 | <bool key="IBUIClipsSubviews">YES</bool> |
37 | <bool key="IBUIUserInteractionEnabled">NO</bool> | 37 | <bool key="IBUIUserInteractionEnabled">NO</bool> |
38 | <string type="base64-UTF8" key="IBUIText">RGVtb25zdHJhdGVzIGZldGNoaW5nIGEgd2ViIHBhZ2Ugc3luY2hyb25vdXNseSwgdGhlIEhUTUwgc291 | 38 | <string type="base64-UTF8" key="IBUIText">RGVtb25zdHJhdGVzIGZldGNoaW5nIGEgd2ViIHBhZ2Ugc3luY2hyb25vdXNseSwgdGhlIEhUTUwgc291 |
39 | cmNlIHdpbGwgYXBwZWFyIGluIHRoZSBib3ggYmVsb3cgd2hlbiB0aGUgZG93bmxvYWQgaXMgY29tcGxl | 39 | cmNlIHdpbGwgYXBwZWFyIGluIHRoZSBib3ggYmVsb3cgd2hlbiB0aGUgZG93bmxvYWQgaXMgY29tcGxl |
40 | -dGUuICBJbiByZWFsIHdvcmxkIHNpdHVhdGlvbnMsIHlvdSdkIGJlIG1vcmUgbGlrZWx5IHRvIHJ1biB0 | 40 | +dGUuICBUaGUgaW50ZXJmYWNlIHdpbGwgbG9jayB1cCB3aGVuIHlvdSBwcmVzcyB0aGlzIGJ1dHRvbiB1 |
41 | -aGlzIGluIGEgdGhyZWFkLg</string> | 41 | +bnRpbCB0aGUgb3BlcmF0aW9uIHRpbWVzIG91dCBvciBzdWNjZWVkcy4gSW4gcmVhbCB3b3JsZCBzaXR1 |
42 | +YXRpb25zLCB5b3UnZCBiZSBtb3JlIGxpa2VseSB0byB1c2Ugc3luY2hyb25vdXMgcmVxdWVzdHMgaW4g | ||
43 | +YSB0aHJlYWQuA</string> | ||
42 | <object class="NSFont" key="IBUIFont" id="467718481"> | 44 | <object class="NSFont" key="IBUIFont" id="467718481"> |
43 | <string key="NSName">Helvetica</string> | 45 | <string key="NSName">Helvetica</string> |
44 | <double key="NSSize">1.400000e+01</double> | 46 | <double key="NSSize">1.400000e+01</double> |
@@ -56,7 +58,7 @@ aGlzIGluIGEgdGhyZWFkLg</string> | @@ -56,7 +58,7 @@ aGlzIGluIGEgdGhyZWFkLg</string> | ||
56 | <object class="IBUIButton" id="963091686"> | 58 | <object class="IBUIButton" id="963091686"> |
57 | <reference key="NSNextResponder" ref="191373211"/> | 59 | <reference key="NSNextResponder" ref="191373211"/> |
58 | <int key="NSvFlags">292</int> | 60 | <int key="NSvFlags">292</int> |
59 | - <string key="NSFrame">{{20, 133}, {72, 37}}</string> | 61 | + <string key="NSFrame">{{20, 172}, {72, 37}}</string> |
60 | <reference key="NSSuperview" ref="191373211"/> | 62 | <reference key="NSSuperview" ref="191373211"/> |
61 | <bool key="IBUIOpaque">NO</bool> | 63 | <bool key="IBUIOpaque">NO</bool> |
62 | <bool key="IBUIClearsContextBeforeDrawing">NO</bool> | 64 | <bool key="IBUIClearsContextBeforeDrawing">NO</bool> |
@@ -84,7 +86,7 @@ aGlzIGluIGEgdGhyZWFkLg</string> | @@ -84,7 +86,7 @@ aGlzIGluIGEgdGhyZWFkLg</string> | ||
84 | <object class="IBUITextView" id="251778509"> | 86 | <object class="IBUITextView" id="251778509"> |
85 | <reference key="NSNextResponder" ref="191373211"/> | 87 | <reference key="NSNextResponder" ref="191373211"/> |
86 | <int key="NSvFlags">292</int> | 88 | <int key="NSvFlags">292</int> |
87 | - <string key="NSFrame">{{20, 184}, {280, 187}}</string> | 89 | + <string key="NSFrame">{{20, 217}, {280, 154}}</string> |
88 | <reference key="NSSuperview" ref="191373211"/> | 90 | <reference key="NSSuperview" ref="191373211"/> |
89 | <bool key="IBUIOpaque">NO</bool> | 91 | <bool key="IBUIOpaque">NO</bool> |
90 | <bool key="IBUIClipsSubviews">YES</bool> | 92 | <bool key="IBUIClipsSubviews">YES</bool> |
-
Please register or login to post a comment