James Hawkins <[EMAIL PROTECTED]> writes:

> Unless I'm mistaken, we don't want to free allocated memory only when
> the call fails.

Sorry, but you are wrong. When you always free the memory you will run
into a segmentation fault when the application uses the returned
stream.

The problem is the same as with the icmstream patch you made. The
current implementation will work correctly in all cases although it doesn't
look very COM-like as Mike already pointed out for the icmstream patch.

The methods you analyzed are only called internally from
IClassFactory_fnCreateInstance in the factory.c file.

The memory block which is allocated by LocalAlloc in the
AVIFILE_CreateICMStream and AVIFILE_CreateACMStream is only returned
to the application if the IAVIStream_QueryInterface call doesn't
return an error.  So when you always free the memory block you will
most probably run into a segmentation fault.

The proposed patch from Mike for the icmstream.c file should be
adapted to this file when you don't like the LocalFree call there, but
I'm sure that then people will ask why we don't call LocalFree in
this method. So it would be perhaps fine when also some comments would
be added to prevent another discussion about what's wrong or correct.

When you don't understand the code feel free to write me as I'm the
one who has produced it.

  Regards

    Michael Günnewig


Reply via email to