On 10/9/06, Michal Okresa <[EMAIL PROTECTED]> wrote:
On Monday 09 October 2006 19:14, Dan Kegel wrote: ... > I think it's great you're working on this. What were the bugs?Thanks for your comments. I discovered these two problems in Rob's patch which make test crash. * Firstly function IKindaEnumWidget_Release(pKEW) was called twice in test sequence: IKindaEnumWidget_Release(pKEW); IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); hr = CoUnmarshalInterface(pStream, &IID_IKindaEnumWidget, (void **)&pKEW); ok_ole_success(hr, CoUnmarshalInterface); IStream_Release(pStream); hr = IKindaEnumWidget_Next(pKEW, &pWidget); /* pKEW !!! */ ok_ole_success(hr, IKindaEnumWidget_Next); IKindaEnumWidget_Release(pKEW); As you can see, pKEW is used even though memory was released. * Second problem was in function: static IWidget *Widget_Create(void). ITypeLib_GetTypeInfoOfGuid failed with wine (but only in last test - test_DispCallFunc) and hr pointer is NULL. Therefore ITypeLib_Release(pTypeInfo) after IF {} block might not be called. hr = ITypeLib_GetTypeInfoOfGuid(pTypeLib, &IID_IWidget, &pTypeInfo); ok_ole_success(hr, ITypeLib_GetTypeInfoOfGuid); if (SUCCEEDED(hr)) { This->pDispatchUnknown = NULL; hr = CreateStdDispatch((IUnknown *)&This->lpVtbl, This, pTypeInfo, &This->pDispatchUnknown); ok_ole_success(hr, CreateStdDispatch); ITypeInfo_Release(pTypeInfo); } ITypeLib_Release(pTypeInfo); (hr is null) This problem was difficult to find because test crashed randomly (winedbg excercise ;-) ) And finally I added few VariantClear() calls (but this isn't important)
Thanks for the info... Dan H., could you have a quick look at Michal's patch? - Dan
