Module: wine
Branch: master
Commit: 787d0ab5641e8417667481862202569b9cdd0f02
URL: http://source.winehq.org/git/wine.git/?a=commit;h=787d0ab5641e8417667481862…
Author: Juan Lang <juan.lang(a)gmail.com>
Date: Tue Nov 3 16:46:50 2009 -0800
crypt32: Add an error if the ref count is invalid when releasing a context.
---
dlls/crypt32/context.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/dlls/crypt32/context.c b/dlls/crypt32/context.c
index b8ad220..e0c1932 100644
--- a/dlls/crypt32/context.c
+++ b/dlls/crypt32/context.c
@@ -173,7 +173,10 @@ BOOL Context_Release(void *context, size_t contextSize,
BOOL ret = TRUE;
if (base->ref <= 0)
+ {
+ ERR("%p's ref count is %d\n", context, base->ref);
return FALSE;
+ }
if (base->type == ContextTypeLink)
{
/* The linked context is of the same type as this, so release
Module: wine
Branch: master
Commit: 17894eb0936f96b2570d9799ce2532745513f23a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=17894eb0936f96b2570d9799c…
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);
}