[PATCH 1/5] mfplat: Fix asynchronous object creation from URL.

Derek Lesho dlesho at codeweavers.com
Tue Oct 20 09:13:52 CDT 2020


On 10/20/20 6:28 AM, Nikolay Sivov wrote:

>
> On 10/17/20 1:02 AM, Derek Lesho wrote:
>> Signed-off-by: Derek Lesho <dlesho at codeweavers.com>
>> ---
>>   dlls/mfplat/main.c         | 4 +++-
>>   dlls/mfplat/tests/mfplat.c | 2 --
>>   2 files changed, 3 insertions(+), 3 deletions(-)
>>
>> diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
>> index a6ff97ae04a..8ed18b1b87f 100644
>> --- a/dlls/mfplat/main.c
>> +++ b/dlls/mfplat/main.c
>> @@ -5750,6 +5750,8 @@ static HRESULT resolver_handler_end_create(struct source_resolver *resolver, enu
>>       if (!(queued_result = heap_alloc_zero(sizeof(*queued_result))))
>>           return E_OUTOFMEMORY;
>>   
>> +    queued_result->origin = origin;
>> +
>>       IRtwqAsyncResult_GetObject(inner_result, &handler.handler);
> This one is good, only worked before because 0 is occasionally valid too.
>>   
>>       switch (origin)
>> @@ -5788,8 +5790,8 @@ static HRESULT resolver_handler_end_create(struct source_resolver *resolver, enu
>>   
>>           if (SUCCEEDED(RtwqCreateAsyncResult(queued_result->object, data->pCallback, caller_state, &caller_result)))
>>           {
>> +            queued_result->inner_result = caller_result;
>>               RtwqInvokeCallback(caller_result);
>> -            IRtwqAsyncResult_Release(caller_result);
>>           }
>>       }
> It's been a while, could you explain what this part fixes? Maybe we
> could have another test for it.
Ah, good catch, I took a glance at `if (iter->inner_result == result || 
(iter->object == object && iter->origin == origin))` and assumed all 
three fields had to match.  I'll resend without the second hunk.
>>   
>> diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c
>> index 55c07adb1fe..a5388840bc5 100644
>> --- a/dlls/mfplat/tests/mfplat.c
>> +++ b/dlls/mfplat/tests/mfplat.c
>> @@ -343,12 +343,10 @@ static HRESULT WINAPI test_create_from_url_callback_Invoke(IMFAsyncCallback *ifa
>>   
>>       object = NULL;
>>       hr = IMFSourceResolver_EndCreateObjectFromURL(resolver, result, &obj_type, &object);
>> -todo_wine
>>       ok(hr == S_OK, "Failed to create an object, hr %#x.\n", hr);
>>   
>>       hr = IMFAsyncResult_GetObject(result, &object2);
>>       ok(hr == S_OK, "Failed to get result object, hr %#x.\n", hr);
>> -todo_wine
>>       ok(object2 == object, "Unexpected object.\n");
> First hunk alone fixes these two tests for me.
>>   
>>       if (object)
>



More information about the wine-devel mailing list