Memory Leak in Delta

Hello,

we found a Leak in a DataAbstract component.

for (DADataTable *table in aDataTables)
{
DADelta *delta = [[[DADelta alloc] init] autorelease];
[rda.dataStreamer readDelta:delta forTable:table];

	if ([delta hasErrors]) 
	{	
		hasErrors = YES;
		[errors addObjectsFromArray:[delta errors]];
		errorMessages = [errorMessages stringByAppendingString:[delta errorMessages]];
		
		for (DADeltaChange *change in [delta errors])
			[self remoteDataAdapter:rda didFailToApplyChange:change forTable:table];//_MC
	}
    
    NSString *entityid = [(TSyncObjectRec*)[objects objectAtIndex:i] idEntityTypeID];
	[self serverAnswerDelta:delta forEntity:entityid];//_MC
	[table processDelta:delta andMergeChanges:YES];
	progress += progress_step;//_MC
    i++;
}
[rda.dataStreamer finalizeStreamer];

The leak happens in “[rda.dataStreamer readDelta:delta forTable:table];”

The deepest instruction is:

  • (void)readUtf8String:(NSString **)value
    {
    int32 strlength = [self readInt32];
    if (strlength > [data length] - position) {
    [ROBinHelpers unexpectedStringLength];
    }
    *value = [[[NSString alloc] initWithBytes:bytes+position length:strlength encoding:NSUTF8StringEncoding] autorelease];
    [self advancePositionBy:strlength];
    }

Where the Leak is in “*value = …”

Is there something wrong in my code or yours?

Kind regards

Stephan

Hi Stephan

I’ve checked the code but couldn’t find problems there.
Can I ask you to provide a small test case where this problem is present, and I’ll try to analyze it.

You can send it directly to support@remobjects.com

Thanks

therefore i would have to setup a testserver, testclient etc. Or do you have a best practise to setup a testproject for that?

Stephan

Hi,

You can use for example our samples server application but setup your client for it which will do the same as your real leaking client does