- Fix logic in Stream_fnRelease, refcount should be decremented before

the test for 0.
- Use Interlocked* functions in Stream_fnRelease .
- Store the result of the Interlocked functions and this in the
  TRACE.
oldstable
Paul Vriens 2005-01-12 19:29:22 +00:00 committed by Alexandre Julliard
parent e9ca9f1955
commit fea45b1493
2 changed files with 8 additions and 6 deletions

View File

@ -160,10 +160,11 @@ static ULONG WINAPI ACMStream_fnAddRef(IAVIStream *iface)
static ULONG WINAPI ACMStream_fnRelease(IAVIStream* iface)
{
IAVIStreamImpl *This = (IAVIStreamImpl *)iface;
ULONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) -> %ld\n", iface, This->ref - 1);
TRACE("(%p) -> %ld\n", iface, ref);
if (This->ref == 0) {
if (ref == 0) {
/* destruct */
if (This->has != NULL) {
if (This->acmStreamHdr.fdwStatus & ACMSTREAMHEADER_STATUSF_PREPARED)
@ -202,7 +203,7 @@ static ULONG WINAPI ACMStream_fnRelease(IAVIStream* iface)
if (This->pStream != NULL)
IAVIStream_Release(This->pStream);
return --This->ref;
return ref;
}
/* lParam1: PAVISTREAM

View File

@ -176,10 +176,11 @@ static ULONG WINAPI ICMStream_fnAddRef(IAVIStream *iface)
static ULONG WINAPI ICMStream_fnRelease(IAVIStream* iface)
{
IAVIStreamImpl *This = (IAVIStreamImpl *)iface;
ULONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) -> %ld\n", iface, This->ref - 1);
TRACE("(%p) -> %ld\n", iface, ref);
if (This->ref == 0) {
if (ref == 0) {
/* destruct */
if (This->pg != NULL) {
AVIStreamGetFrameClose(This->pg);
@ -224,7 +225,7 @@ static ULONG WINAPI ICMStream_fnRelease(IAVIStream* iface)
if (This->pStream != NULL)
IAVIStream_Release(This->pStream);
return --This->ref;
return ref;
}
/* lParam1: PAVISTREAM