From ddfe0c96982c50901504921291a1b973c1304941 Mon Sep 17 00:00:00 2001 From: Andrew McGeachie Date: Wed, 10 Feb 2010 01:03:01 +0000 Subject: [PATCH] THRIFT-687. Fix memory leak in TSocketServer. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@908303 13f79535-47bb-0310-9956-ffa450edef68 --- lib/cocoa/src/server/TSocketServer.m | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/cocoa/src/server/TSocketServer.m b/lib/cocoa/src/server/TSocketServer.m index 56a5beaf..23b3d105 100644 --- a/lib/cocoa/src/server/TSocketServer.m +++ b/lib/cocoa/src/server/TSocketServer.m @@ -48,6 +48,7 @@ NSString * const kTSockerServer_TransportKey = @"TSockerServer_Transport"; int fd = -1; CFSocketRef socket = CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_STREAM, IPPROTO_TCP, 0, NULL, NULL); if (socket) { + CFSocketSetSocketFlags(socket, CFSocketGetSocketFlags(socket) & ~kCFSocketCloseOnInvalidate); fd = CFSocketGetNative(socket); int yes = 1; setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void *)&yes, sizeof(yes)); @@ -60,6 +61,8 @@ NSString * const kTSockerServer_TransportKey = @"TSockerServer_Transport"; addr.sin_addr.s_addr = htonl(INADDR_ANY); NSData *address = [NSData dataWithBytes:&addr length:sizeof(addr)]; if (CFSocketSetAddress(socket, (CFDataRef)address) != kCFSocketSuccess) { + CFSocketInvalidate(socket); + CFRelease(socket); NSLog(@"*** Could not bind to address"); return nil; } @@ -72,6 +75,10 @@ NSString * const kTSockerServer_TransportKey = @"TSockerServer_Transport"; mSocketFileHandle = [[NSFileHandle alloc] initWithFileDescriptor: fd closeOnDealloc: YES]; + // throw away our socket + CFSocketInvalidate(socket); + CFRelease(socket); + // register for notifications of accepted incoming connections [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(connectionAccepted:) -- 2.17.1