Zebediah Figura : msctf/tests: Simplify ITfThreadMgrEventSink refcounting tests.
Alexandre Julliard
julliard at winehq.org
Sun Oct 27 15:06:17 CDT 2019
Module: wine
Branch: master
Commit: 9516ad1fc7a77861ae2944ce5dc3cbc81c5bbdf4
URL: https://source.winehq.org/git/wine.git/?a=commit;h=9516ad1fc7a77861ae2944ce5dc3cbc81c5bbdf4
Author: Zebediah Figura <z.figura12 at gmail.com>
Date: Sat Oct 26 12:00:22 2019 -0500
msctf/tests: Simplify ITfThreadMgrEventSink refcounting tests.
Just use one static object, and don't depend on the thread manager
never calling AddRef()/Release().
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msctf/tests/inputprocessor.c | 48 ++++++---------------------------------
1 file changed, 7 insertions(+), 41 deletions(-)
diff --git a/dlls/msctf/tests/inputprocessor.c b/dlls/msctf/tests/inputprocessor.c
index 1222085fe0..1d972ef0de 100644
--- a/dlls/msctf/tests/inputprocessor.c
+++ b/dlls/msctf/tests/inputprocessor.c
@@ -61,7 +61,6 @@ static BOOL test_ShouldActivate = FALSE;
static BOOL test_ShouldDeactivate = FALSE;
static DWORD tmSinkCookie;
-static DWORD tmSinkRefCount;
static DWORD dmSinkCookie;
static DWORD documentStatus;
static DWORD key_trace_sink_cookie, ui_element_sink_cookie, profile_activation_sink_cookie;
@@ -484,11 +483,6 @@ static inline ThreadMgrEventSink *impl_from_ITfThreadMgrEventSink(ITfThreadMgrEv
return CONTAINING_RECORD(iface, ThreadMgrEventSink, ITfThreadMgrEventSink_iface);
}
-static void ThreadMgrEventSink_Destructor(ThreadMgrEventSink *This)
-{
- HeapFree(GetProcessHeap(),0,This);
-}
-
static HRESULT WINAPI ThreadMgrEventSink_QueryInterface(ITfThreadMgrEventSink *iface, REFIID iid, LPVOID *ppvOut)
{
*ppvOut = NULL;
@@ -510,20 +504,13 @@ static HRESULT WINAPI ThreadMgrEventSink_QueryInterface(ITfThreadMgrEventSink *i
static ULONG WINAPI ThreadMgrEventSink_AddRef(ITfThreadMgrEventSink *iface)
{
ThreadMgrEventSink *This = impl_from_ITfThreadMgrEventSink(iface);
- ok (tmSinkRefCount == This->refCount,"ThreadMgrEventSink refcount off %i vs %i\n",This->refCount,tmSinkRefCount);
return InterlockedIncrement(&This->refCount);
}
static ULONG WINAPI ThreadMgrEventSink_Release(ITfThreadMgrEventSink *iface)
{
ThreadMgrEventSink *This = impl_from_ITfThreadMgrEventSink(iface);
- ULONG ret;
-
- ok (tmSinkRefCount == This->refCount,"ThreadMgrEventSink refcount off %i vs %i\n",This->refCount,tmSinkRefCount);
- ret = InterlockedDecrement(&This->refCount);
- if (ret == 0)
- ThreadMgrEventSink_Destructor(This);
- return ret;
+ return InterlockedDecrement(&This->refCount);
}
static HRESULT WINAPI ThreadMgrEventSink_OnInitDocumentMgr(ITfThreadMgrEventSink *iface,
@@ -613,20 +600,7 @@ static const ITfThreadMgrEventSinkVtbl ThreadMgrEventSink_ThreadMgrEventSinkVtbl
ThreadMgrEventSink_OnPopContext
};
-static HRESULT ThreadMgrEventSink_Constructor(IUnknown **ppOut)
-{
- ThreadMgrEventSink *This;
-
- This = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(ThreadMgrEventSink));
- if (This == NULL)
- return E_OUTOFMEMORY;
-
- This->ITfThreadMgrEventSink_iface.lpVtbl = &ThreadMgrEventSink_ThreadMgrEventSinkVtbl;
- This->refCount = 1;
-
- *ppOut = (IUnknown*)&This->ITfThreadMgrEventSink_iface;
- return S_OK;
-}
+static ThreadMgrEventSink thread_mgr_event_sink = {{&ThreadMgrEventSink_ThreadMgrEventSinkVtbl}, 1};
static HRESULT WINAPI TfKeyTraceEventSink_QueryInterface(ITfKeyTraceEventSink *iface, REFIID riid, void **ppv)
{
@@ -1224,27 +1198,18 @@ static void test_ThreadMgrAdviseSinks(void)
{
ITfSource *source = NULL;
HRESULT hr;
- IUnknown *sink;
hr = ITfThreadMgr_QueryInterface(g_tm, &IID_ITfSource, (LPVOID*)&source);
ok(SUCCEEDED(hr),"Failed to get IID_ITfSource for ThreadMgr\n");
if (!source)
return;
- hr = ThreadMgrEventSink_Constructor(&sink);
- ok(hr == S_OK, "got %08x\n", hr);
- if(FAILED(hr)) return;
-
- tmSinkRefCount = 1;
tmSinkCookie = 0;
- hr = ITfSource_AdviseSink(source,&IID_ITfThreadMgrEventSink, sink, &tmSinkCookie);
+ hr = ITfSource_AdviseSink(source,&IID_ITfThreadMgrEventSink,
+ (IUnknown *)&thread_mgr_event_sink.ITfThreadMgrEventSink_iface, &tmSinkCookie);
ok(hr == S_OK, "Failed to Advise ITfThreadMgrEventSink\n");
ok(tmSinkCookie!=0,"Failed to get sink cookie\n");
-
- /* Advising the sink adds a ref, Releasing here lets the object be deleted
- when unadvised */
- tmSinkRefCount = 2;
- IUnknown_Release(sink);
+ ok(thread_mgr_event_sink.refCount == 2, "Got %d references.\n", thread_mgr_event_sink.refCount);
hr = ITfSource_AdviseSink(source, &IID_ITfKeyTraceEventSink, (IUnknown*)&TfKeyTraceEventSink,
&key_trace_sink_cookie);
@@ -1271,9 +1236,10 @@ static void test_ThreadMgrUnadviseSinks(void)
if (!source)
return;
- tmSinkRefCount = 1;
+ ok(thread_mgr_event_sink.refCount == 2, "Got %d references.\n", thread_mgr_event_sink.refCount);
hr = ITfSource_UnadviseSink(source, tmSinkCookie);
ok(hr == S_OK, "Failed to unadvise ITfThreadMgrEventSink\n");
+ ok(thread_mgr_event_sink.refCount == 1, "Got %d references.\n", thread_mgr_event_sink.refCount);
hr = ITfSource_UnadviseSink(source, key_trace_sink_cookie);
ok(hr == S_OK, "Failed to unadvise ITfKeyTraceEventSink\n");
More information about the wine-cvs
mailing list