Changeset 666

Show
Ignore:
Timestamp:
09/21/08 21:24:03 (4 months ago)
Author:
gbooker
Message:

Sometimes the save fails due to locking; exponential backoff on attempts

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/CoreData/SapphireFrappliance/MetaData/Support/SapphireMetaDataSupport.m

    r657 r666  
    9292} 
    9393 
     94- (void) dealloc 
     95{ 
     96        [writeTimer invalidate]; 
     97        writeTimer = nil; 
     98        [super dealloc]; 
     99} 
     100 
     101 
    94102- (void)realWriteMetaData:(NSTimer *)timer 
    95103{ 
     104        NSTimeInterval interval = [writeTimer timeInterval] * 2; 
    96105        writeTimer = nil; 
    97106        NSManagedObjectContext *context = nil; 
     
    101110                context = [timer userInfo]; 
    102111        NSError *error = nil; 
     112        BOOL success = NO; 
    103113        @try { 
    104                 [context save:&error]; 
     114                success = [context save:&error]; 
    105115        } 
    106116        @catch (NSException * e) { 
     
    109119        if(error != nil) 
    110120                NSLog(@"Save error %@", error); 
     121        if(success == NO) 
     122        { 
     123                if(interval == 0) 
     124                        interval = 1; 
     125                [writeTimer invalidate]; 
     126                writeTimer = [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(realWriteMetaData:) userInfo:context repeats:NO]; 
     127        } 
    111128} 
    112129 
    113130- (void)save:(NSManagedObjectContext *)context; 
    114131{ 
    115 /*      [writeTimer invalidate]; 
    116         writeTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(realWriteMetaData:) userInfo:context repeats:NO];*/ 
    117132        [self realWriteMetaData:(NSTimer *)context]; 
    118133}