DCOM Heap Memory Leak When Using IDataObject/IAdviseSink (242918)



The information in this article applies to:

  • Microsoft Windows 95
  • Microsoft Windows 98
  • Microsoft Windows 98 Second Edition

This article was previously published under Q242918

SYMPTOMS

When you use Uniform Data Transfer calls to IAdviseSink::OnDataChange, a memory leak of 32 bytes on the client side and 148 bytes on the server side may occur.

The problem occurs only when the client uses the STA model.

RESOLUTION

A supported fix is now available from Microsoft, but it is only intended to correct the problem that is described in this article. Apply it only to computers that are experiencing this specific problem. This fix may receive additional testing. Therefore, if you are not severely affected by this problem, Microsoft recommends that you wait for the next DCOM release that contains this hotfix.

To resolve this problem immediately, contact Microsoft Product Support Services to obtain the fix. For a complete list of Microsoft Product Support Services phone numbers and information about support costs, visit the following Microsoft Web site:NOTE: In special cases, charges that are ordinarily incurred for support calls may be canceled if a Microsoft Support Professional determines that a specific update will resolve your problem. The typical support costs will apply to additional support questions and issues that do not qualify for the specific update in question.

The English-language version of this fix should have the following file attributes or later:
   Date      Time    Version      Size       File name     Platform
   -----------------------------------------------------------------
   12/17/99  09:33PM 4.71.1015.0  1,229,056  Dcom95.exe    Windows 95
   12/16/99  09:22PM 4.71.1015.0  1,229,056  Dcom98.exe    Windows 98 SE

				

STATUS

Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article.

MORE INFORMATION

There is a memory link in OLE32 when you use Uniform Data Transfer between a data object on a local server that implements the IDataObject interface and a client that implements the IAdviseSink interface.

When a client wants to be notified by a data object server that data has been modified, it calls IDataObject::DAdvise, giving the server a pointer to the client's IAdviseSink interface. When the data is modified on the server, the server calls IAdviseSink::OnDataChange to notify the client. The client calls IDataObject::DUnAdvise to break the connection.

OLE implements data advise holder which implements IDataAdviseHolder (created by CreateDataAdviseHolder) to help the data object to notify all clients that are connected to the data object. The server calls IDataAdviseHolder::SendOnDataChange and the data advise holder then calls IAdviseSink::OnDataChange on each advise sink that is connected to the server.

The problem is that every call to IAdviseSink::OnDataChange causes a memory leak of one object of 32 bytes on the client side and 148 bytes on the server side. The problem only occurs when the client uses the STA model.

Modification Type:MinorLast Reviewed:10/5/2005
Keywords:kbbug kbfix kbQFE KB242918