diff --git a/src/MacVim/MMBackend.m b/src/MacVim/MMBackend.m index 7bec3d3cb9..cce7d8ca83 100644 --- a/src/MacVim/MMBackend.m +++ b/src/MacVim/MMBackend.m @@ -273,6 +273,7 @@ - (void)dealloc [outputQueue release]; outputQueue = nil; [drawData release]; drawData = nil; [connection release]; connection = nil; + [appProxy release]; appProxy = nil; [actionDict release]; actionDict = nil; [sysColorDict release]; sysColorDict = nil; [colorDict release]; colorDict = nil; @@ -1746,11 +1747,11 @@ - (NSArray *)serverList { NSArray *list = nil; - if ([self connection]) { - id proxy = [connection rootProxy]; - [proxy setProtocolForProxy:@protocol(MMAppProtocol)]; - + if ([self connection] && [connection isValid]) { @try { + id proxy = [connection rootProxy]; + [proxy setProtocolForProxy:@protocol(MMAppProtocol)]; + list = [proxy serverList]; } @catch (NSException *ex) { @@ -2535,6 +2536,14 @@ - (void)connectionDidDie:(NSNotification * UNUSED)notification ASLogNotice(@"Main connection was lost before process had a chance " "to terminate; preserving swap files."); + + // Just release the connection, in case some autocmd's end up triggering + // IPC calls during shutdown. If other code use isValid checks this is a + // little unnecessary, but it just helps prevent issues with code that use + // the connection or proxy without checking for validity first. + [connection release]; connection = nil; + [appProxy release]; appProxy = nil; + getout_preserve_modified(1); }