Jacek Caban : urlmon: Added a helper function for releasing protocol handler.
Alexandre Julliard
julliard at winehq.org
Tue Jun 6 15:23:35 CDT 2017
Module: wine
Branch: master
Commit: ccc5ba29ca1fd3a0334f06355de24ae237b676a1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ccc5ba29ca1fd3a0334f06355de24ae237b676a1
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Jun 6 17:15:40 2017 +0200
urlmon: Added a helper function for releasing protocol handler.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/urlmon/bindprot.c | 39 ++++++++++++++++++++++++++++-----------
dlls/urlmon/urlmon_main.h | 6 ++++--
2 files changed, 32 insertions(+), 13 deletions(-)
diff --git a/dlls/urlmon/bindprot.c b/dlls/urlmon/bindprot.c
index a4399ab..1e9dd5c 100644
--- a/dlls/urlmon/bindprot.c
+++ b/dlls/urlmon/bindprot.c
@@ -328,6 +328,31 @@ static ULONG WINAPI BindProtocol_AddRef(IInternetProtocolEx *iface)
return ref;
}
+static void release_protocol_handler(BindProtocol *This)
+{
+ if(This->wininet_info) {
+ IWinInetInfo_Release(This->wininet_info);
+ This->wininet_info = NULL;
+ }
+ if(This->wininet_http_info) {
+ IWinInetHttpInfo_Release(This->wininet_http_info);
+ This->wininet_http_info = NULL;
+ }
+ if(This->protocol) {
+ IInternetProtocol_Release(This->protocol);
+ This->protocol = NULL;
+ }
+ if(This->protocol_handler && This->protocol_handler != &This->default_protocol_handler.IInternetProtocol_iface) {
+ IInternetProtocol_Release(This->protocol_handler);
+ This->protocol_handler = &This->default_protocol_handler.IInternetProtocol_iface;
+ }
+ if(This->protocol_sink_handler &&
+ This->protocol_sink_handler != &This->default_protocol_handler.IInternetProtocolSink_iface) {
+ IInternetProtocolSink_Release(This->protocol_sink_handler);
+ This->protocol_sink_handler = &This->default_protocol_handler.IInternetProtocolSink_iface;
+ }
+}
+
static ULONG WINAPI BindProtocol_Release(IInternetProtocolEx *iface)
{
BindProtocol *This = impl_from_IInternetProtocolEx(iface);
@@ -336,19 +361,11 @@ static ULONG WINAPI BindProtocol_Release(IInternetProtocolEx *iface)
TRACE("(%p) ref=%d\n", This, ref);
if(!ref) {
- if(This->wininet_info)
- IWinInetInfo_Release(This->wininet_info);
- if(This->wininet_http_info)
- IWinInetHttpInfo_Release(This->wininet_http_info);
- if(This->protocol)
- IInternetProtocol_Release(This->protocol);
+ release_protocol_handler(This);
+ if(This->redirect_callback)
+ IBindCallbackRedirect_Release(This->redirect_callback);
if(This->bind_info)
IInternetBindInfo_Release(This->bind_info);
- if(This->protocol_handler && This->protocol_handler != &This->default_protocol_handler.IInternetProtocol_iface)
- IInternetProtocol_Release(This->protocol_handler);
- if(This->protocol_sink_handler &&
- This->protocol_sink_handler != &This->default_protocol_handler.IInternetProtocolSink_iface)
- IInternetProtocolSink_Release(This->protocol_sink_handler);
if(This->uri)
IUri_Release(This->uri);
SysFreeString(This->display_uri);
diff --git a/dlls/urlmon/urlmon_main.h b/dlls/urlmon/urlmon_main.h
index 5de1afe..ee26bed 100644
--- a/dlls/urlmon/urlmon_main.h
+++ b/dlls/urlmon/urlmon_main.h
@@ -176,11 +176,13 @@ typedef struct {
LONG ref;
IInternetProtocol *protocol;
+ IWinInetInfo *wininet_info;
+ IWinInetHttpInfo *wininet_http_info;
+
IInternetBindInfo *bind_info;
IInternetProtocolSink *protocol_sink;
IServiceProvider *service_provider;
- IWinInetInfo *wininet_info;
- IWinInetHttpInfo *wininet_http_info;
+ IBindCallbackRedirect *redirect_callback;
struct {
IInternetProtocol IInternetProtocol_iface;
More information about the wine-cvs
mailing list