From 97f7632b08d5187322df2d09813167ac4a35eb0b Mon Sep 17 00:00:00 2001 From: Johannes Harth <166_MMX@gmx.net> Date: Thu, 13 Oct 2016 13:25:11 +0200 Subject: [PATCH 1/2] Fix potentially long stack init event loop --- MFCore/MFFilesystemController.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MFCore/MFFilesystemController.m b/MFCore/MFFilesystemController.m index 8ef4851..ebf7108 100644 --- a/MFCore/MFFilesystemController.m +++ b/MFCore/MFFilesystemController.m @@ -49,7 +49,8 @@ @implementation MFFilesystemController #pragma mark Init and Singleton methods + (MFFilesystemController *)sharedController { if (sharedController == nil) { - sharedController = [[self alloc] init]; + sharedController = [self alloc]; + [sharedController init]; } return sharedController; From e750d71f85e56c8705272a13b42f7439bb03a65c Mon Sep 17 00:00:00 2001 From: Johannes Harth <166_MMX@gmx.net> Date: Thu, 13 Oct 2016 13:27:28 +0200 Subject: [PATCH 2/2] Try harder to not loose objects though GC --- MFCore/MFCore.m | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/MFCore/MFCore.m b/MFCore/MFCore.m index 45c8e9d..99355ff 100644 --- a/MFCore/MFCore.m +++ b/MFCore/MFCore.m @@ -72,11 +72,12 @@ BOOL mfcGetStateOfLoginItemWithPath(NSString *path) { UInt32 seedValue; LSSharedFileListRef loginItemsRef = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL); - NSArray *loginItems = (__bridge NSArray *)(LSSharedFileListCopySnapshot(loginItemsRef, &seedValue)); + CFArrayRef loginItems = LSSharedFileListCopySnapshot(loginItemsRef, &seedValue); BOOL present = FALSE; - for(id loginItem in loginItems) { + CFIndex arrayCount = CFArrayGetCount(loginItems); + for(CFIndex i = 0; i < arrayCount; ++i) { CFURLRef urlRef; - LSSharedFileListItemRef itemRef = (__bridge LSSharedFileListItemRef)loginItem; + LSSharedFileListItemRef itemRef = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(loginItems, i); LSSharedFileListItemResolve(itemRef, 0, &urlRef, NULL); NSURL *theURL = (__bridge NSURL*) urlRef; present = [[theURL path] isEqualToString:path]; @@ -86,7 +87,7 @@ BOOL mfcGetStateOfLoginItemWithPath(NSString *path) { } } CFRelease(loginItemsRef); - CFRelease((__bridge CFTypeRef)(loginItems)); + CFRelease(loginItems); return present; } @@ -103,10 +104,11 @@ BOOL mfcSetStateForAgentLoginItem(BOOL state) { UInt32 seedValue; LSSharedFileListRef loginItemsRef = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL); - NSArray *loginItems = (__bridge NSArray *)LSSharedFileListCopySnapshot(loginItemsRef, &seedValue); - for(id loginItem in loginItems) { + CFArrayRef loginItems = LSSharedFileListCopySnapshot(loginItemsRef, &seedValue); + CFIndex arrayCount = CFArrayGetCount(loginItems); + for(CFIndex i = 0; i < arrayCount; ++i) { CFURLRef urlRef; - LSSharedFileListItemRef itemRef = (__bridge LSSharedFileListItemRef)loginItem; + LSSharedFileListItemRef itemRef = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(loginItems, i); LSSharedFileListItemResolve(itemRef, 0, &urlRef, NULL); NSURL *theURL = (__bridge NSURL*) urlRef; NSString* checkPath = [[theURL path] lastPathComponent]; @@ -121,7 +123,7 @@ BOOL mfcSetStateForAgentLoginItem(BOOL state) { (__bridge CFURLRef)[NSURL fileURLWithPath: agentPath], NULL, NULL); } CFRelease(loginItemsRef); - CFRelease((__bridge CFTypeRef)(loginItems)); + CFRelease(loginItems); return YES; }