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

Alexandre Julliard julliard at winehq.org
Wed Nov 4 10:26:25 CST 2009


Module: wine
Branch: master
Commit: 17894eb0936f96b2570d9799ce2532745513f23a
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=17894eb0936f96b2570d9799ce2532745513f23a

Author: Juan Lang <juan.lang at 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);
     }




More information about the wine-cvs mailing list