Skip to content

Instantly share code, notes, and snippets.

@snej
Created March 29, 2013 17:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save snej/5272175 to your computer and use it in GitHub Desktop.
Save snej/5272175 to your computer and use it in GitHub Desktop.
Speculative fix for TDSocketChangeTracker.m that might resolve couchbaselabs/TouchDB-iOS#241
diff --git a/Source/ChangeTracker/TDSocketChangeTracker.m b/Source/ChangeTracker/TDSocketChangeTracker.m
index e151937..151355a 100644
--- a/Source/ChangeTracker/TDSocketChangeTracker.m
+++ b/Source/ChangeTracker/TDSocketChangeTracker.m
@@ -27,7 +27,7 @@
#define kMaxRetries 6
#define kInitialRetryDelay 0.2
-#define kReadLength 8192u
+#define kReadLength 4096u
@implementation TDSocketChangeTracker
@@ -126,6 +126,7 @@
- (void) clearConnection {
[_trackingInput close];
+ [_trackingInput removeFromRunLoop: [NSRunLoop currentRunLoop] forMode: NSRunLoopCommonModes];
_trackingInput = nil;
_inputBuffer = nil;
_changeBuffer = nil;
@@ -391,18 +392,12 @@
Assert(_inputAvailable);
_inputAvailable = false;
- uint8_t* buffer;
- NSUInteger bufferLength;
- NSInteger bytesRead;
- if ([_trackingInput getBuffer: &buffer length: &bufferLength]) {
- [_inputBuffer appendBytes: buffer length: bufferLength];
- bytesRead = bufferLength;
- } else {
- uint8_t buffer[kReadLength];
- bytesRead = [_trackingInput read: buffer maxLength: sizeof(buffer)];
- if (bytesRead > 0)
- [_inputBuffer appendBytes: buffer length: bytesRead];
- }
+ uint8_t buffer[kReadLength];
+ NSInteger bytesRead = [_trackingInput read: buffer maxLength: sizeof(buffer)];
+ if (bytesRead > 0)
+ [_inputBuffer appendBytes: buffer length: bytesRead];
+ else
+ Warn(@"%@: input stream read returned %ld", self, (long)bytesRead); // should never happen
LogTo(ChangeTracker, @"%@: read %ld bytes", self, (long)bytesRead);
if (_mode == kContinuous)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment