Spot the Bug - IMFOutputSchema
This blog post has moved to https://matthewvaneerde.wordpress.com/2008/05/27/spot-the-bug-imfoutputschema/
Comments
Anonymous
June 09, 2008
Without much review, I am thinking QueryInterface should initialize m_cRefCount. It does not appear that the private reference count is every properly initialized.Anonymous
June 16, 2008
Bingo. I fixed this by updating the initializer list in the constructor: // constructor CTrustedAudioDriversOutputSchema::CTrustedAudioDriversOutputSchema( DWORD dwConfigData, GUID guidOriginatorID ) : m_cRefCount(1) , m_dwConfigData(dwConfigData) , m_guidOriginatorID(guidOriginatorID) {} There's more than one way to do refcount initialization. I could equally well have initialized the refcount to 0 and done an AddRef() in the factory function. When I ran under the debugger, the debugger initialized m_cRefCount with garbage memory, so the refcount never dropped to zero; when I ran outside of the debugger, m_cRefCount was initialized to 0, so the "delete this;" in Release() was called one Release() too soon.