oleaut32: Fix circular reference count in Typelib marshaler.
authorRobert Shearman <rob@codeweavers.com>
Tue, 7 Feb 2006 15:26:23 +0000 (16:26 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Tue, 7 Feb 2006 15:26:23 +0000 (16:26 +0100)
commitb0218db90a8b3c81ecb6529c089acc0074cd2f9c
treecd074e47d9863e997753d5ade9c4c1caccef37f6
parentfd81d9c56e2f6368ff30e6c095050a2840558151
oleaut32: Fix circular reference count in Typelib marshaler.
The current method of handling typelib-marshaled interfaces that derive
from IDispatch is to query for an IDispatch pointer from the proxy, but
this causes a circular reference count.
Fix the reference counting by loading using the IRpcProxyBuffer of
IDispatch without an outer unknown, so that the lifetime is controlled
by the typelib-marshaled interface's proxy. The IDispatch proxy now
shares the same channel as the typelib-marshaled interface, so fix up
the stub side to handle this.
dlls/oleaut32/tmarshal.c