From 17894eb0936f96b2570d9799ce2532745513f23a Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Fri, 30 Oct 2009 17:32:49 -0700 Subject: [PATCH] crypt32: Release a link context's linked context on every release, not just when it reaches 0. --- dlls/crypt32/context.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/dlls/crypt32/context.c b/dlls/crypt32/context.c index 2f1720abb02..109fcd43e8e 100644 --- a/dlls/crypt32/context.c +++ b/dlls/crypt32/context.c @@ -171,25 +171,22 @@ BOOL Context_Release(void *context, size_t contextSize, if (base->ref <= 0) 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) { TRACE("freeing %p\n", context); - switch (base->type) + if (base->type == ContextTypeData) { - case ContextTypeData: ContextPropertyList_Free(((PDATA_CONTEXT)base)->properties); 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); }