Juan Lang : crypt32: Release a link context' s linked context on every release, not just when it reaches 0.
Module: wine Branch: master Commit: 17894eb0936f96b2570d9799ce2532745513f23a URL: http://source.winehq.org/git/wine.git/?a=commit;h=17894eb0936f96b2570d9799ce... Author: Juan Lang <juan.lang(a)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); }
participants (1)
-
Alexandre Julliard