Module: wine Branch: master Commit: 17894eb0936f96b2570d9799ce2532745513f23a URL: http://source.winehq.org/git/wine.git/?a=commit;h=17894eb0936f96b2570d9799ce...
Author: Juan Lang juan.lang@gmail.com Date: Fri Oct 30 17:32:49 2009 -0700
crypt32: Release a link context's linked context on every release, not just when it reaches 0.
---
dlls/crypt32/context.c | 23 ++++++++++------------- 1 files changed, 10 insertions(+), 13 deletions(-)
diff --git a/dlls/crypt32/context.c b/dlls/crypt32/context.c index 2f1720a..109fcd4 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); }