crypt32: Release a link context's linked context on every release, not just when it reaches 0.

This commit is contained in:
Juan Lang 2009-10-30 17:32:49 -07:00 committed by Alexandre Julliard
parent 52820b9cf8
commit 17894eb093
1 changed files with 10 additions and 13 deletions

View File

@ -171,25 +171,22 @@ BOOL Context_Release(void *context, size_t contextSize,
if (base->ref <= 0) if (base->ref <= 0)
return FALSE; return FALSE;
if (base->type == ContextTypeLink)
{
/* The linked context is of the same type as this, so release
* it as well, using the same offset and data free function.
*/
ret = Context_Release(CONTEXT_FROM_BASE_CONTEXT(
((PLINK_CONTEXT)base)->linked, contextSize), contextSize,
dataContextFree);
}
if (InterlockedDecrement(&base->ref) == 0) if (InterlockedDecrement(&base->ref) == 0)
{ {
TRACE("freeing %p\n", context); TRACE("freeing %p\n", context);
switch (base->type) if (base->type == ContextTypeData)
{ {
case ContextTypeData:
ContextPropertyList_Free(((PDATA_CONTEXT)base)->properties); ContextPropertyList_Free(((PDATA_CONTEXT)base)->properties);
dataContextFree(context); dataContextFree(context);
break;
case ContextTypeLink:
/* The linked context is of the same type as this, so release
* it as well, using the same offset and data free function.
*/
ret = Context_Release(CONTEXT_FROM_BASE_CONTEXT(
((PLINK_CONTEXT)base)->linked, contextSize), contextSize,
dataContextFree);
break;
default:
assert(0);
} }
CryptMemFree(context); CryptMemFree(context);
} }