From 989c72530e789abf234cca5e6084e585cc073bb6 Mon Sep 17 00:00:00 2001 From: Stephan Witt Date: Fri, 9 Oct 2015 08:16:10 +0200 Subject: [PATCH] Avoid the use of a static NSAutoreleasePool. This seems to cause crashes on exit from time to time. --- src/support/linkback/LinkBackProxy.m | 54 ++++++++++------------------ 1 file changed, 19 insertions(+), 35 deletions(-) diff --git a/src/support/linkback/LinkBackProxy.m b/src/support/linkback/LinkBackProxy.m index 0f6b71d664..e676c686f9 100644 --- a/src/support/linkback/LinkBackProxy.m +++ b/src/support/linkback/LinkBackProxy.m @@ -16,8 +16,6 @@ /////////////////////////////////////////////////////////////////////// -static NSAutoreleasePool * pool = nil; - @interface LyXLinkBackClient : NSObject { NSMutableSet * keys; } @@ -173,42 +171,32 @@ static NSAutoreleasePool * pool = nil; static LyXLinkBackClient * linkBackClient = nil; -void checkAutoReleasePool() -{ - if (pool == nil) - pool = [[NSAutoreleasePool alloc] init]; -} - int isLinkBackDataInPasteboard() { - checkAutoReleasePool() ; - { - NSArray * linkBackType = [NSArray arrayWithObjects: LinkBackPboardType, nil]; - NSString * ret = [[NSPasteboard generalPasteboard] availableTypeFromArray:linkBackType]; - return ret != nil; - } + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + NSArray * linkBackType = [NSArray arrayWithObjects: LinkBackPboardType, nil]; + NSString * ret = [[NSPasteboard generalPasteboard] availableTypeFromArray:linkBackType]; + [pool release]; + return ret != nil; } void getLinkBackData(void const * * buf, unsigned * len) { - checkAutoReleasePool() ; - { - // get linkback data from pasteboard - NSPasteboard * pboard = [NSPasteboard generalPasteboard]; - id linkBackData = [pboard propertyListForType:LinkBackPboardType]; + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + // get linkback data from pasteboard + NSPasteboard * pboard = [NSPasteboard generalPasteboard]; + id linkBackData = [pboard propertyListForType:LinkBackPboardType]; - NSData * nsdata - = [NSArchiver archivedDataWithRootObject:linkBackData]; - if (nsdata == nil) { - *buf = 0; - *len = 0; - return; - } - + NSData * nsdata = [NSArchiver archivedDataWithRootObject:linkBackData]; + if (nsdata == nil) { + *buf = 0; + *len = 0; + } else { *buf = [nsdata bytes]; *len = [nsdata length]; } + [pool release]; } @@ -217,11 +205,12 @@ int editLinkBackFile(char const * docName) // setup Obj-C and our client if (linkBackClient == nil) linkBackClient = [[LyXLinkBackClient alloc] init]; - checkAutoReleasePool() ; - + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; // FIXME: really UTF8 here? NSString * nsDocName = [NSString stringWithUTF8String:docName]; - return [linkBackClient edit:nsDocName] == YES; + int result = [linkBackClient edit:nsDocName] == YES; + [pool release]; + return result; } @@ -231,10 +220,5 @@ void closeAllLinkBackLinks() [linkBackClient release]; linkBackClient = nil; } - - if (pool != nil) { - [pool drain]; - pool = nil; - } } -- 2.39.2