Commit ccc5ba29 authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

urlmon: Added a helper function for releasing protocol handler.

parent cded0779
...@@ -328,6 +328,31 @@ static ULONG WINAPI BindProtocol_AddRef(IInternetProtocolEx *iface) ...@@ -328,6 +328,31 @@ static ULONG WINAPI BindProtocol_AddRef(IInternetProtocolEx *iface)
return ref; 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) static ULONG WINAPI BindProtocol_Release(IInternetProtocolEx *iface)
{ {
BindProtocol *This = impl_from_IInternetProtocolEx(iface); BindProtocol *This = impl_from_IInternetProtocolEx(iface);
...@@ -336,19 +361,11 @@ static ULONG WINAPI BindProtocol_Release(IInternetProtocolEx *iface) ...@@ -336,19 +361,11 @@ static ULONG WINAPI BindProtocol_Release(IInternetProtocolEx *iface)
TRACE("(%p) ref=%d\n", This, ref); TRACE("(%p) ref=%d\n", This, ref);
if(!ref) { if(!ref) {
if(This->wininet_info) release_protocol_handler(This);
IWinInetInfo_Release(This->wininet_info); if(This->redirect_callback)
if(This->wininet_http_info) IBindCallbackRedirect_Release(This->redirect_callback);
IWinInetHttpInfo_Release(This->wininet_http_info);
if(This->protocol)
IInternetProtocol_Release(This->protocol);
if(This->bind_info) if(This->bind_info)
IInternetBindInfo_Release(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) if(This->uri)
IUri_Release(This->uri); IUri_Release(This->uri);
SysFreeString(This->display_uri); SysFreeString(This->display_uri);
......
...@@ -176,11 +176,13 @@ typedef struct { ...@@ -176,11 +176,13 @@ typedef struct {
LONG ref; LONG ref;
IInternetProtocol *protocol; IInternetProtocol *protocol;
IWinInetInfo *wininet_info;
IWinInetHttpInfo *wininet_http_info;
IInternetBindInfo *bind_info; IInternetBindInfo *bind_info;
IInternetProtocolSink *protocol_sink; IInternetProtocolSink *protocol_sink;
IServiceProvider *service_provider; IServiceProvider *service_provider;
IWinInetInfo *wininet_info; IBindCallbackRedirect *redirect_callback;
IWinInetHttpInfo *wininet_http_info;
struct { struct {
IInternetProtocol IInternetProtocol_iface; IInternetProtocol IInternetProtocol_iface;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment