From: Piotr Caban <piotr@codeweavers.com> --- dlls/combase/combase.c | 14 +++++++++++--- dlls/ole32/tests/compobj.c | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/dlls/combase/combase.c b/dlls/combase/combase.c index 8b42615fc0e..ad4d0bfce68 100644 --- a/dlls/combase/combase.c +++ b/dlls/combase/combase.c @@ -2545,9 +2545,17 @@ static HRESULT WINAPI thread_context_info_GetCurrentLogicalThreadId(IComThreadin static HRESULT WINAPI thread_context_info_SetCurrentLogicalThreadId(IComThreadingInfo *iface, REFGUID logical_thread_id) { - FIXME("%s stub\n", debugstr_guid(logical_thread_id)); + struct tlsdata *tlsdata; + HRESULT hr; - return E_NOTIMPL; + TRACE("%s\n", debugstr_guid(logical_thread_id)); + + if (FAILED(hr = com_get_tlsdata(&tlsdata))) + return hr; + + tlsdata->causality_id = *logical_thread_id; + tlsdata->flags |= OLETLS_UUIDINITIALIZED; + return S_OK; } static const IComThreadingInfoVtbl thread_context_info_vtbl = @@ -2794,7 +2802,7 @@ HRESULT WINAPI CoGetCurrentLogicalThreadId(GUID *id) if (FAILED(hr = com_get_tlsdata(&tlsdata))) return hr; - if (IsEqualGUID(&tlsdata->causality_id, &GUID_NULL)) + if (!(tlsdata->flags & OLETLS_UUIDINITIALIZED)) { CoCreateGuid(&tlsdata->causality_id); tlsdata->flags |= OLETLS_UUIDINITIALIZED; diff --git a/dlls/ole32/tests/compobj.c b/dlls/ole32/tests/compobj.c index 1f6e2326129..5ec5febb1a9 100644 --- a/dlls/ole32/tests/compobj.c +++ b/dlls/ole32/tests/compobj.c @@ -2044,6 +2044,21 @@ static void test_CoGetObjectContext(void) hr = CoGetCurrentLogicalThreadId(&id2); ok(IsEqualGUID(&id, &id2), "got %s, expected %s\n", wine_dbgstr_guid(&id), wine_dbgstr_guid(&id2)); + id = GUID_NULL; + hr = IComThreadingInfo_SetCurrentLogicalThreadId(pComThreadingInfo, &id); + ok(hr == S_OK, "got 0x%08lx\n", hr); + + hr = IComThreadingInfo_GetCurrentLogicalThreadId(pComThreadingInfo, &id); + ok(hr == S_OK, "got 0x%08lx\n", hr); + ok(IsEqualGUID(&id, &GUID_NULL), "id = %s\n", wine_dbgstr_guid(&id)); + + hr = CoGetCurrentLogicalThreadId(&id); + ok(hr == S_OK, "got 0x%08lx\n", hr); + ok(IsEqualGUID(&id, &GUID_NULL), "id = %s\n", wine_dbgstr_guid(&id)); + + hr = IComThreadingInfo_SetCurrentLogicalThreadId(pComThreadingInfo, &id2); + ok(hr == S_OK, "got 0x%08lx\n", hr); + hr = IComThreadingInfo_GetCurrentApartmentType(pComThreadingInfo, &apttype); ok_ole_success(hr, "IComThreadingInfo_GetCurrentApartmentType"); ok(apttype == APTTYPE_MAINSTA, "apartment type should be APTTYPE_MAINSTA instead of %d\n", apttype); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10982