tobros91
tobros91

Reputation: 668

Crashes with EXC_BAD_ACCESS with Garbage Collection after hours of running

i have a app where several videos are being randomly displayed and everything was sweet and worked great. Since they program loops the same code over and over again I find it very odd that is just stops all of a sudden. What can the error message below be about?

But after many hours it crashes. The first time it ran for 13 hours before crash and tonight it crashed after 11 hours.

Process:         CamRecorder [4695]
Path:            /Users/wgv/Desktop/Fullscreeen/CamRecorder.app/Contents/MacOS/CamRecorder
Identifier:      wgv.CamRecorder
Version:         1.0 (1)
Code Type:       X86 (Native)
Parent Process:  launchd [86]

Date/Time:       2011-03-01 02:21:03.509 +0100
OS Version:      Mac OS X 10.6.6 (10J567)
Report Version:  6

Interval Since Last Report:          428620 sec
Crashes Since Last Report:           2
Per-App Interval Since Last Report:  257957 sec
Per-App Crashes Since Last Report:   2
Anonymous UUID:                      4528D13C-54C9-413F-92D9-128D05272F57


Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000fef6e1df
Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Application Specific Information:
objc_msgSend() selector name: rectSetBeingDrawnForView:
objc[4695]: garbage collection is ON

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   libobjc.A.dylib                     0x93719ed7 objc_msgSend + 23
1   com.apple.AppKit                    0x915ae95c -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 4668
2   com.apple.AppKit                    0x915ae95c -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 4668
3   com.apple.AppKit                    0x9164caa3 -[NSNextStepFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 311
4   com.apple.AppKit                    0x915a9ea2 -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] + 3309
5   com.apple.AppKit                    0x9150aa57 -[NSView displayIfNeeded] + 818
6   com.apple.AppKit                    0x914be661 -[NSNextStepFrame displayIfNeeded] + 98
7   com.apple.AppKit                    0x914d3d40 -[NSWindow displayIfNeeded] + 204
8   com.apple.AppKit                    0x9150528a _handleWindowNeedsDisplay + 696
9   com.apple.CoreFoundation            0x91397e02 __CFRunLoopDoObservers + 1186
10  com.apple.CoreFoundation            0x91353d8d __CFRunLoopRun + 557
11  com.apple.CoreFoundation            0x91353464 CFRunLoopRunSpecific + 452
12  com.apple.CoreFoundation            0x91353291 CFRunLoopRunInMode + 97
13  com.apple.HIToolbox                 0x9904e004 RunCurrentEventLoopInMode + 392
14  com.apple.HIToolbox                 0x9904ddbb ReceiveNextEventCommon + 354
15  com.apple.HIToolbox                 0x9904dc40 BlockUntilNextEventMatchingListInMode + 81
16  com.apple.AppKit                    0x914db78d _DPSNextEvent + 847
17  com.apple.AppKit                    0x914dafce -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 156
18  com.apple.AppKit                    0x9149d247 -[NSApplication run] + 821
19  com.apple.AppKit                    0x914952d9 NSApplicationMain + 574
20  wgv.CamRecorder                     0x00001ff9 start + 53

Le Code

-(void)playMovie
{


NSError *error = nil;
NSString *pathString = [NSString stringWithFormat:@"/Users/Shared/Real/Movies"];

fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:pathString error: &error];

NSInteger lenghtOfArray = [fileList count];

NSInteger myNewFavoriteRandomNumber = arc4random() % lenghtOfArray;

NSString *fileName = [NSString stringWithFormat:@"%@",[fileList objectAtIndex:myNewFavoriteRandomNumber]];
fileName = [fileName stringByDeletingPathExtension];

NSString *fuckDS_Store = [NSString stringWithFormat:@"%@",[fileList objectAtIndex:myNewFavoriteRandomNumber]];
if([fuckDS_Store isEqualToString:@".DS_Store"])
{ 
    [self playMovie];
}
else
{
    if([lastPlayedVideo intValue] == myNewFavoriteRandomNumber)
    {
        if(lenghtOfArray > 3)
        {
            [self playMovie];

        }
    }
    else if([lastPlayedVideo2 intValue] == myNewFavoriteRandomNumber)
    {
        if(lenghtOfArray > 3)
        {
            [self playMovie];
        }
    }
    else
    {
        lastPlayedVideo2 = lastPlayedVideo;
        lastPlayedVideo = [NSNumber numberWithInt:myNewFavoriteRandomNumber];

        [textfield setStringValue:[fileList objectAtIndex:myNewFavoriteRandomNumber]];

        NSError *cperror = nil;


        NSString* stringMoviePath = [NSString stringWithFormat:@"/Users/Shared/Real/Movies/%@.mov",fileName];

        QTMovie* movie = [[QTMovie alloc] initWithFile:stringMoviePath error:&cperror];


        if(movie)
        {
            [movieViewLoop setMovie:movie]; 
            [movieViewLoop play:@"yes"];
        }
        else
        {
            //[self playMovie]; 
            [self performSelector:@selector(playMovie) withObject:@"Oki" afterDelay:1];
        }
    }   

}
}
- (void)movieDidEnd:(NSNotification *)aNotification //Every time a movie has been played this is being run
{
   if([blockLoop intValue] == 0)
   {
       [self playMovie];
   }
}

Upvotes: 1

Views: 460

Answers (1)

Nikolai Ruhe
Nikolai Ruhe

Reputation: 81868

The code that crashes is deeply nested in AppKit. The window is busy redrawing a part of it's view hierarchy. In this process it uses a (private) _NSDisplayOperation objects, that responds to the mentioned rectSetBeingDrawnForView: selector.

The stack trace looks like AppKit tries to message an erroneously collected display operation object. The crash has probably nothing at all to do with your code.

So, what can you do about it?

  1. File a bug
  2. Avoid garbage collection

Upvotes: 1

Related Questions