Jacek Caban : netprofm: Release connection point sink entries in object destructor.
Alexandre Julliard
julliard at winehq.org
Sun Aug 20 00:02:29 CDT 2017
Module: wine
Branch: master
Commit: c289169aaa38b847749d9064edbac32a81b17782
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c289169aaa38b847749d9064edbac32a81b17782
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Aug 18 14:43:39 2017 +0200
netprofm: Release connection point sink entries in object destructor.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/netprofm/list.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/dlls/netprofm/list.c b/dlls/netprofm/list.c
index 3f57284..e28be12 100644
--- a/dlls/netprofm/list.c
+++ b/dlls/netprofm/list.c
@@ -222,6 +222,13 @@ static HRESULT WINAPI connection_point_Advise(
return S_OK;
}
+static void sink_entry_release( struct sink_entry *entry )
+{
+ list_remove( &entry->entry );
+ IUnknown_Release( entry->unk );
+ heap_free( entry );
+}
+
static HRESULT WINAPI connection_point_Unadvise(
IConnectionPoint *iface,
DWORD cookie )
@@ -234,9 +241,7 @@ static HRESULT WINAPI connection_point_Unadvise(
LIST_FOR_EACH_ENTRY( iter, &cp->sinks, struct sink_entry, entry )
{
if (iter->cookie != cookie) continue;
- list_remove( &iter->entry );
- IUnknown_Release( iter->unk );
- heap_free( iter );
+ sink_entry_release( iter );
return S_OK;
}
@@ -278,6 +283,12 @@ static void connection_point_init(
list_init( &cp->sinks );
}
+static void connection_point_release( struct connection_point *cp )
+{
+ while (!list_empty( &cp->sinks ))
+ sink_entry_release( LIST_ENTRY( list_head( &cp->sinks ), struct sink_entry, entry ) );
+}
+
static inline struct network *impl_from_INetwork(
INetwork *iface )
{
@@ -1110,6 +1121,9 @@ static ULONG WINAPI list_manager_Release(
TRACE( "destroying %p\n", mgr );
+ connection_point_release( &mgr->conn_mgr_cp );
+ connection_point_release( &mgr->cost_mgr_cp );
+ connection_point_release( &mgr->list_mgr_cp );
while ((ptr = list_head( &mgr->networks )))
{
struct network *network = LIST_ENTRY( ptr, struct network, entry );
More information about the wine-cvs
mailing list