mfplat: Signal synchronous resolver methods on handler failure.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
a1fca92720
commit
66bfd5f40c
|
@ -5883,6 +5883,7 @@ static HRESULT resolver_handler_end_create(struct source_resolver *resolver, enu
|
||||||
IRtwqAsyncResult *result)
|
IRtwqAsyncResult *result)
|
||||||
{
|
{
|
||||||
IRtwqAsyncResult *inner_result = (IRtwqAsyncResult *)IRtwqAsyncResult_GetStateNoAddRef(result);
|
IRtwqAsyncResult *inner_result = (IRtwqAsyncResult *)IRtwqAsyncResult_GetStateNoAddRef(result);
|
||||||
|
RTWQASYNCRESULT *data = (RTWQASYNCRESULT *)inner_result;
|
||||||
struct resolver_queued_result *queued_result;
|
struct resolver_queued_result *queued_result;
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
|
@ -5891,7 +5892,8 @@ static HRESULT resolver_handler_end_create(struct source_resolver *resolver, enu
|
||||||
IMFSchemeHandler *scheme_handler;
|
IMFSchemeHandler *scheme_handler;
|
||||||
} handler;
|
} handler;
|
||||||
|
|
||||||
queued_result = heap_alloc_zero(sizeof(*queued_result));
|
if (!(queued_result = heap_alloc_zero(sizeof(*queued_result))))
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
IRtwqAsyncResult_GetObject(inner_result, &handler.handler);
|
IRtwqAsyncResult_GetObject(inner_result, &handler.handler);
|
||||||
|
|
||||||
|
@ -5911,10 +5913,6 @@ static HRESULT resolver_handler_end_create(struct source_resolver *resolver, enu
|
||||||
|
|
||||||
IUnknown_Release(handler.handler);
|
IUnknown_Release(handler.handler);
|
||||||
|
|
||||||
if (SUCCEEDED(queued_result->hr))
|
|
||||||
{
|
|
||||||
RTWQASYNCRESULT *data = (RTWQASYNCRESULT *)inner_result;
|
|
||||||
|
|
||||||
if (data->hEvent)
|
if (data->hEvent)
|
||||||
{
|
{
|
||||||
queued_result->inner_result = inner_result;
|
queued_result->inner_result = inner_result;
|
||||||
|
@ -5939,9 +5937,6 @@ static HRESULT resolver_handler_end_create(struct source_resolver *resolver, enu
|
||||||
IRtwqAsyncResult_Release(caller_result);
|
IRtwqAsyncResult_Release(caller_result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
heap_free(queued_result);
|
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -605,6 +605,10 @@ skip_source_tests:
|
||||||
/* Create from URL. */
|
/* Create from URL. */
|
||||||
callback.event = CreateEventA(NULL, FALSE, FALSE, NULL);
|
callback.event = CreateEventA(NULL, FALSE, FALSE, NULL);
|
||||||
|
|
||||||
|
hr = IMFSourceResolver_CreateObjectFromURL(resolver, L"nonexisting.mp4", MF_RESOLUTION_BYTESTREAM, NULL, &obj_type,
|
||||||
|
(IUnknown **)&stream);
|
||||||
|
ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
hr = IMFSourceResolver_CreateObjectFromURL(resolver, filename, MF_RESOLUTION_BYTESTREAM, NULL, &obj_type,
|
hr = IMFSourceResolver_CreateObjectFromURL(resolver, filename, MF_RESOLUTION_BYTESTREAM, NULL, &obj_type,
|
||||||
(IUnknown **)&stream);
|
(IUnknown **)&stream);
|
||||||
ok(hr == S_OK, "Failed to resolve url, hr %#x.\n", hr);
|
ok(hr == S_OK, "Failed to resolve url, hr %#x.\n", hr);
|
||||||
|
|
Loading…
Reference in New Issue