From: Rémi Bernon rbernon@codeweavers.com
And E_ILLEGAL_METHOD_CALL if called when status isn't Completed or Error.
Signed-off-by: Rémi Bernon rbernon@codeweavers.com --- dlls/windows.media.speech/async.c | 10 +++++----- dlls/windows.media.speech/tests/speech.c | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/dlls/windows.media.speech/async.c b/dlls/windows.media.speech/async.c index 1e6dd336c84..3d3db840fa0 100644 --- a/dlls/windows.media.speech/async.c +++ b/dlls/windows.media.speech/async.c @@ -201,16 +201,16 @@ static HRESULT WINAPI async_operation_GetResults( IAsyncOperation_IInspectable * TRACE("iface %p, results %p.\n", iface, results);
EnterCriticalSection(&impl->cs); - if (impl->status == Closed) + if (impl->status != Completed && impl->status != Error) hr = E_ILLEGAL_METHOD_CALL; - else if (impl->status > Started && impl->result) + else if (!impl->result) + hr = E_UNEXPECTED; + else { *results = impl->result; impl->result = NULL; /* NOTE: AsyncOperation gives up it's reference to result here! */ - hr = S_OK; + hr = impl->hr; } - else - hr = E_UNEXPECTED; LeaveCriticalSection(&impl->cs);
return hr; diff --git a/dlls/windows.media.speech/tests/speech.c b/dlls/windows.media.speech/tests/speech.c index 051b38ce0f9..e6120afdad0 100644 --- a/dlls/windows.media.speech/tests/speech.c +++ b/dlls/windows.media.speech/tests/speech.c @@ -988,7 +988,7 @@ static void test_SpeechRecognizer(void)
compilation_result = (void*)0xdeadbeef; hr = IAsyncOperation_SpeechRecognitionCompilationResult_GetResults(operation, &compilation_result); - todo_wine ok(hr == E_ILLEGAL_METHOD_CALL, "Got unexpected hr %#lx.\n", hr); + ok(hr == E_ILLEGAL_METHOD_CALL, "Got unexpected hr %#lx.\n", hr); ok(compilation_result == (void*)0xdeadbeef, "Compilation result had value %p.\n", compilation_result);
hr = IAsyncOperation_SpeechRecognitionCompilationResult_put_Completed(operation, &compilation_handler.IAsyncHandler_Compilation_iface);