STKAutoRecoveringHTTPDataSource now stops retrying to connect if DataSource no longer has an event loop

This commit is contained in:
Thong Nguyen 2014-02-13 11:34:05 +00:00
parent 6216abb0ab
commit ab0c4d1315
4 changed files with 16 additions and 12 deletions

View File

@ -42,7 +42,7 @@
#import "libkern/OSAtomic.h"
#import <float.h>
#pragma mark Defines
#pragma mark Defines%
#define kOutputBus 0
#define kInputBus 1

View File

@ -214,7 +214,9 @@ static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReach
if (runLoop == nil)
{
[self performSelector:@selector(attemptReconnectWithSerial:) withObject:@(serial) afterDelay:waitSeconds];
// DataSource no longer used
return;
}
else
{

View File

@ -101,6 +101,11 @@ static void ReadStreamCallbackProc(CFReadStreamRef stream, CFStreamEventType eve
{
if (stream)
{
if (eventsRunLoop)
{
[self unregisterForEvents];
}
CFReadStreamClose(stream);
CFRelease(stream);
@ -127,6 +132,8 @@ static void ReadStreamCallbackProc(CFReadStreamRef stream, CFStreamEventType eve
{
CFReadStreamSetClient(stream, kCFStreamEventHasBytesAvailable | kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered, NULL, NULL);
CFReadStreamUnscheduleFromRunLoop(stream, [eventsRunLoop getCFRunLoop], kCFRunLoopCommonModes);
eventsRunLoop = nil;
}
}

View File

@ -216,17 +216,12 @@
-(void) seekToOffset:(long long)offset
{
if (eventsRunLoop)
{
[self unregisterForEvents];
}
NSRunLoop* savedEventsRunLoop = eventsRunLoop;
[self close];
eventsRunLoop = savedEventsRunLoop;
if (stream)
{
CFReadStreamClose(stream);
CFRelease(stream);
}
NSAssert([NSRunLoop currentRunLoop] == eventsRunLoop, @"Seek called on wrong thread");
stream = 0;