Thrift-1264:TSocketClient is queried by run loop after deallocation in Cocoa
Client: cocoa
Patch: Jan Ruth
Fixes TSocketClient not deallocated correctly.
diff --git a/lib/cocoa/src/transport/TSocketClient.m b/lib/cocoa/src/transport/TSocketClient.m
index 256ecf3..1a7eea8 100644
--- a/lib/cocoa/src/transport/TSocketClient.m
+++ b/lib/cocoa/src/transport/TSocketClient.m
@@ -25,13 +25,20 @@
#import <CFNetwork/CFNetwork.h>
#endif
+@interface TSocketClient ()
+{
+ NSInputStream * inputStream;
+ NSOutputStream * outputStream;
+}
+@end
+
@implementation TSocketClient
- (id) initWithHostname: (NSString *) hostname
port: (int) port
{
- NSInputStream * inputStream = NULL;
- NSOutputStream * outputStream = NULL;
+ inputStream = NULL;
+ outputStream = NULL;
CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (bridge_stub CFStringRef)hostname, port, &readStream, &writeStream);
@@ -59,6 +66,20 @@
return self;
}
+-(void)dealloc
+{
+ [inputStream close];
+ [inputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
+ [inputStream setDelegate:nil];
+ [inputStream release_stub];
+
+ [outputStream close];
+ [outputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
+ [outputStream setDelegate:nil];
+ [outputStream release_stub];
+ [super dealloc_stub];
+}
+
@end