Hello, I have a problem with 10.7 where when you drag files to a view which 
accepts files, it'll crash because of a leak of some sort. This is triggered by 
my CFRunLoopObserver which I've written because operations which is done in the 
background never had the autorelease pool drained until the UI was brought up 
and my application's UI was hardly ever brought up.

Let me explain the setup. First is my run loop observer.

static NSAutoreleasePool *pool = nil;

void runloop(CFRunLoopObserverRef observer, CFRunLoopActivity activity, void 
*info) {
        if (activity & kCFRunLoopEntry) {
                if (pool!=nil) [pool drain];
                pool = [NSAutoreleasePool new];
        } else if (activity & kCFRunLoopExit) {
                [pool drain];
                pool = nil;
        }
}

CFRunLoopObserverContext  context = {0, self, NULL, NULL, NULL};
CFRunLoopObserverRef observer = CFRunLoopObserverCreate(kCFAllocatorDefault, 
kCFRunLoopEntry | kCFRunLoopExit, YES, 0, runloop, &context);
CFRunLoopAddObserver(CFRunLoopGetCurrent(), observer, kCFRunLoopDefaultMode);

This is what I used to get around the memory never being released while the UI 
was not shown. Because my application deals in files and has watchers for 
files, whenever a watcher found a file and read it, that file would stay in the 
ram until you bought up the UI. I know I could of added my own 
NSAutoReleasePool for that part, but that also means other parts of my code 
will have to add that as well as well as some notifications which was way more 
work/code than wanted.

Now my NSView is in a NSStatusItem which will be used for when someone drags to 
that menu in the menubar, it'll allow them to drop the file and have the file 
be uploaded. My NSView registers for files with the following line.

[self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];

Even if I just do that and do not listen for drag operations, it'll crash 
because of my loop observer creating and draining that autorelease pool. All I 
can say is that all of this was working in 10.6 and now is broken in 10.7.

Here is the crash stack so you can see what I'm talking about.
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libobjc.A.dylib                     0x00007fff946d800b (anonymous 
namespace)::AutoreleasePoolPage::pop(void*) + 385
1   com.apple.CoreFoundation            0x00007fff92527f75 
_CFAutoreleasePoolPop + 37
2   com.apple.Foundation                0x00007fff8ecfa057 
-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 275
3   com.apple.Foundation                0x00007fff8ed7dc0a 
-[NSRunLoop(NSRunLoop) runUntilDate:] + 66
4   com.apple.AppKit                    0x00007fff8e4a2523 
NSCoreDragTrackingProc + 3477
5   com.apple.HIServices                0x00007fff94279b0d DoTrackingMessage + 
357
6   com.apple.HIServices                0x00007fff9427b42c 
CoreDragMessageHandler + 461
7   com.apple.CoreFoundation            0x00007fff925ebbb9 
__CFMessagePortPerform + 729
8   com.apple.CoreFoundation            0x00007fff924f911c 
__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 44
9   com.apple.CoreFoundation            0x00007fff924f8e4b __CFRunLoopDoSource1 
+ 155
10  com.apple.CoreFoundation            0x00007fff9252f587 __CFRunLoopRun + 1895
11  com.apple.CoreFoundation            0x00007fff9252eae6 CFRunLoopRunSpecific 
+ 230
12  com.apple.HIToolbox                 0x00007fff9843c3d3 
RunCurrentEventLoopInMode + 277
13  com.apple.HIToolbox                 0x00007fff9844363d 
ReceiveNextEventCommon + 355
14  com.apple.HIToolbox                 0x00007fff984434ca 
BlockUntilNextEventMatchingListInMode + 62
15  com.apple.AppKit                    0x00007fff8e0ca3f1 _DPSNextEvent + 659
16  com.apple.AppKit                    0x00007fff8e0c9cf5 -[NSApplication 
nextEventMatchingMask:untilDate:inMode:dequeue:] + 135
17  com.apple.AppKit                    0x00007fff8e0c662d -[NSApplication run] 
+ 470
18  com.apple.AppKit                    0x00007fff8e34580c NSApplicationMain + 
867

Some of my options are:
1. Forget about the memory usage and remove my runloop observer.
2. Find a new way to prevent this memory issue from happening.
3. Have apple fix Lion.
4. Do whatever you suggest I do.

If you can think of how I can fix this issue, please let me know. If you need a 
test subject, I am willing to point you to my source 
code._______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to