Jacek Caban : msctf: Moved thread manager' s sink list destructor implementation into a more generic helper.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu May 5 10:29:33 CDT 2016
Module: wine
Branch: master
Commit: a27da35b0540bd6a45adb27c880d89c16b8df2dd
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a27da35b0540bd6a45adb27c880d89c16b8df2dd
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed May 4 19:41:13 2016 +0200
msctf: Moved thread manager's sink list destructor implementation into a more generic helper.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/msctf/msctf.c | 9 +++++++++
dlls/msctf/msctf_internal.h | 1 +
dlls/msctf/threadmgr.c | 49 ++++++---------------------------------------
3 files changed, 16 insertions(+), 43 deletions(-)
diff --git a/dlls/msctf/msctf.c b/dlls/msctf/msctf.c
index 81f01dc..a47f16c 100644
--- a/dlls/msctf/msctf.c
+++ b/dlls/msctf/msctf.c
@@ -323,6 +323,15 @@ HRESULT unadvise_sink(DWORD cookie)
return S_OK;
}
+void free_sinks(struct list *sink_list)
+{
+ while(!list_empty(sink_list))
+ {
+ Sink* sink = LIST_ENTRY(sink_list->next, Sink, entry);
+ free_sink(sink);
+ }
+}
+
/*****************************************************************************
* Active Text Service Management
*****************************************************************************/
diff --git a/dlls/msctf/msctf_internal.h b/dlls/msctf/msctf_internal.h
index fc41de5..e4da480 100644
--- a/dlls/msctf/msctf_internal.h
+++ b/dlls/msctf/msctf_internal.h
@@ -77,6 +77,7 @@ typedef struct {
HRESULT advise_sink(struct list *sink_list, REFIID riid, DWORD cookie_magic, IUnknown *unk, DWORD *cookie) DECLSPEC_HIDDEN;
HRESULT unadvise_sink(DWORD cookie) DECLSPEC_HIDDEN;
+void free_sinks(struct list *sink_list) DECLSPEC_HIDDEN;
extern const WCHAR szwSystemTIPKey[] DECLSPEC_HIDDEN;
extern const WCHAR szwSystemCTFKey[] DECLSPEC_HIDDEN;
diff --git a/dlls/msctf/threadmgr.c b/dlls/msctf/threadmgr.c
index bface5d..62508b9 100644
--- a/dlls/msctf/threadmgr.c
+++ b/dlls/msctf/threadmgr.c
@@ -157,12 +157,6 @@ static inline EnumTfDocumentMgr *impl_from_IEnumTfDocumentMgrs(IEnumTfDocumentMg
return CONTAINING_RECORD(iface, EnumTfDocumentMgr, IEnumTfDocumentMgrs_iface);
}
-static void free_sink(Sink *sink)
-{
- IUnknown_Release(sink->interfaces.pIUnknown);
- HeapFree(GetProcessHeap(),0,sink);
-}
-
static void ThreadMgr_Destructor(ThreadMgr *This)
{
struct list *cursor, *cursor2;
@@ -176,43 +170,12 @@ static void ThreadMgr_Destructor(ThreadMgr *This)
if (This->focus)
ITfDocumentMgr_Release(This->focus);
- /* free sinks */
- LIST_FOR_EACH_SAFE(cursor, cursor2, &This->ActiveLanguageProfileNotifySink)
- {
- Sink* sink = LIST_ENTRY(cursor,Sink,entry);
- list_remove(cursor);
- free_sink(sink);
- }
- LIST_FOR_EACH_SAFE(cursor, cursor2, &This->DisplayAttributeNotifySink)
- {
- Sink* sink = LIST_ENTRY(cursor,Sink,entry);
- list_remove(cursor);
- free_sink(sink);
- }
- LIST_FOR_EACH_SAFE(cursor, cursor2, &This->KeyTraceEventSink)
- {
- Sink* sink = LIST_ENTRY(cursor,Sink,entry);
- list_remove(cursor);
- free_sink(sink);
- }
- LIST_FOR_EACH_SAFE(cursor, cursor2, &This->PreservedKeyNotifySink)
- {
- Sink* sink = LIST_ENTRY(cursor,Sink,entry);
- list_remove(cursor);
- free_sink(sink);
- }
- LIST_FOR_EACH_SAFE(cursor, cursor2, &This->ThreadFocusSink)
- {
- Sink* sink = LIST_ENTRY(cursor,Sink,entry);
- list_remove(cursor);
- free_sink(sink);
- }
- LIST_FOR_EACH_SAFE(cursor, cursor2, &This->ThreadMgrEventSink)
- {
- Sink* sink = LIST_ENTRY(cursor,Sink,entry);
- list_remove(cursor);
- free_sink(sink);
- }
+ free_sinks(&This->ActiveLanguageProfileNotifySink);
+ free_sinks(&This->DisplayAttributeNotifySink);
+ free_sinks(&This->KeyTraceEventSink);
+ free_sinks(&This->PreservedKeyNotifySink);
+ free_sinks(&This->ThreadFocusSink);
+ free_sinks(&This->ThreadMgrEventSink);
LIST_FOR_EACH_SAFE(cursor, cursor2, &This->CurrentPreservedKeys)
{
More information about the wine-cvs
mailing list