Jacek Caban : crypt32: Moved critical section out of ContextList struct.

Alexandre Julliard julliard at winehq.org
Thu Oct 17 13:51:50 CDT 2013


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Oct 17 11:09:03 2013 +0200

crypt32: Moved critical section out of ContextList struct.

---

 dlls/crypt32/context.c         |   26 ++++++++++----------------
 dlls/crypt32/crypt32_private.h |    6 +++---
 dlls/crypt32/store.c           |   23 ++++++++++++++---------
 3 files changed, 27 insertions(+), 28 deletions(-)

diff --git a/dlls/crypt32/context.c b/dlls/crypt32/context.c
index 4704154..25cb8be 100644
--- a/dlls/crypt32/context.c
+++ b/dlls/crypt32/context.c
@@ -112,7 +112,6 @@ void Context_CopyProperties(const void *to, const void *from)
 
 struct ContextList
 {
-    CRITICAL_SECTION cs;
     struct list contexts;
 };
 
@@ -122,14 +121,13 @@ struct ContextList *ContextList_Create(void)
 
     if (list)
     {
-        InitializeCriticalSection(&list->cs);
-        list->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": ContextList.cs");
         list_init(&list->contexts);
     }
     return list;
 }
 
-context_t *ContextList_Add(struct ContextList *list, context_t *toLink, context_t *existing, struct WINE_CRYPTCERTSTORE *store, BOOL use_link)
+context_t *ContextList_Add(struct ContextList *list, CRITICAL_SECTION *cs, context_t *toLink,
+ context_t *existing, struct WINE_CRYPTCERTSTORE *store, BOOL use_link)
 {
     context_t *context;
 
@@ -139,7 +137,7 @@ context_t *ContextList_Add(struct ContextList *list, context_t *toLink, context_
     if (context)
     {
         TRACE("adding %p\n", context);
-        EnterCriticalSection(&list->cs);
+        EnterCriticalSection(cs);
         if (existing)
         {
             context->u.entry.prev = existing->u.entry.prev;
@@ -151,17 +149,17 @@ context_t *ContextList_Add(struct ContextList *list, context_t *toLink, context_
         }
         else
             list_add_head(&list->contexts, &context->u.entry);
-        LeaveCriticalSection(&list->cs);
+        LeaveCriticalSection(cs);
     }
     return context;
 }
 
-context_t *ContextList_Enum(struct ContextList *list, context_t *prev)
+context_t *ContextList_Enum(struct ContextList *list, CRITICAL_SECTION *cs, context_t *prev)
 {
     struct list *listNext;
     context_t *ret;
 
-    EnterCriticalSection(&list->cs);
+    EnterCriticalSection(cs);
     if (prev)
     {
         listNext = list_next(&list->contexts, &prev->u.entry);
@@ -169,7 +167,7 @@ context_t *ContextList_Enum(struct ContextList *list, context_t *prev)
     }
     else
         listNext = list_next(&list->contexts, &list->contexts);
-    LeaveCriticalSection(&list->cs);
+    LeaveCriticalSection(cs);
 
     if (listNext)
     {
@@ -181,18 +179,18 @@ context_t *ContextList_Enum(struct ContextList *list, context_t *prev)
     return ret;
 }
 
-BOOL ContextList_Remove(struct ContextList *list, context_t *context)
+BOOL ContextList_Remove(struct ContextList *list, CRITICAL_SECTION *cs, context_t *context)
 {
     BOOL inList = FALSE;
 
-    EnterCriticalSection(&list->cs);
+    EnterCriticalSection(cs);
     if (!list_empty(&context->u.entry))
     {
         list_remove(&context->u.entry);
         list_init(&context->u.entry);
         inList = TRUE;
     }
-    LeaveCriticalSection(&list->cs);
+    LeaveCriticalSection(cs);
 
     return inList;
 }
@@ -201,20 +199,16 @@ static void ContextList_Empty(struct ContextList *list)
 {
     context_t *context, *next;
 
-    EnterCriticalSection(&list->cs);
     LIST_FOR_EACH_ENTRY_SAFE(context, next, &list->contexts, context_t, u.entry)
     {
         TRACE("removing %p\n", context);
         list_remove(&context->u.entry);
         Context_Release(context);
     }
-    LeaveCriticalSection(&list->cs);
 }
 
 void ContextList_Free(struct ContextList *list)
 {
     ContextList_Empty(list);
-    list->cs.DebugInfo->Spare[0] = 0;
-    DeleteCriticalSection(&list->cs);
     CryptMemFree(list);
 }
diff --git a/dlls/crypt32/crypt32_private.h b/dlls/crypt32/crypt32_private.h
index d9f2400..2061ee4 100644
--- a/dlls/crypt32/crypt32_private.h
+++ b/dlls/crypt32/crypt32_private.h
@@ -440,16 +440,16 @@ struct ContextList;
 
 struct ContextList *ContextList_Create(void) DECLSPEC_HIDDEN;
 
-context_t *ContextList_Add(struct ContextList *list, context_t *toLink, context_t *toReplace,
+context_t *ContextList_Add(struct ContextList *list, CRITICAL_SECTION *cs, context_t *toLink, context_t *toReplace,
  struct WINE_CRYPTCERTSTORE *store, BOOL use_link) DECLSPEC_HIDDEN;
 
-context_t *ContextList_Enum(struct ContextList *list, context_t *prev) DECLSPEC_HIDDEN;
+context_t *ContextList_Enum(struct ContextList *list, CRITICAL_SECTION *cs, context_t *prev) DECLSPEC_HIDDEN;
 
 /* Removes a context from the list.  Returns TRUE if the context was removed,
  * or FALSE if not.  (The context may have been duplicated, so subsequent
  * removes have no effect.)
  */
-BOOL ContextList_Remove(struct ContextList *list, context_t *context) DECLSPEC_HIDDEN;
+BOOL ContextList_Remove(struct ContextList *list, CRITICAL_SECTION *cs, context_t *context) DECLSPEC_HIDDEN;
 
 void ContextList_Free(struct ContextList *list) DECLSPEC_HIDDEN;
 
diff --git a/dlls/crypt32/store.c b/dlls/crypt32/store.c
index 7fc6acd..3cbf9e4 100644
--- a/dlls/crypt32/store.c
+++ b/dlls/crypt32/store.c
@@ -82,6 +82,7 @@ const WINE_CONTEXT_INTERFACE *pCTLInterface = &gCTLInterface;
 typedef struct _WINE_MEMSTORE
 {
     WINECRYPT_CERTSTORE hdr;
+    CRITICAL_SECTION cs;
     struct ContextList *certs;
     struct ContextList *crls;
     struct ContextList *ctls;
@@ -150,7 +151,7 @@ static BOOL MemStore_addCert(WINECRYPT_CERTSTORE *store, context_t *cert,
 
     TRACE("(%p, %p, %p, %p)\n", store, cert, toReplace, ppStoreContext);
 
-    context = ContextList_Add(ms->certs, cert, toReplace, store, use_link);
+    context = ContextList_Add(ms->certs, &ms->cs, cert, toReplace, store, use_link);
     if (!context)
         return FALSE;
 
@@ -168,7 +169,7 @@ static context_t *MemStore_enumCert(WINECRYPT_CERTSTORE *store, context_t *prev)
 
     TRACE("(%p, %p)\n", store, prev);
 
-    ret = ContextList_Enum(ms->certs, prev);
+    ret = ContextList_Enum(ms->certs, &ms->cs, prev);
     if (!ret)
         SetLastError(CRYPT_E_NOT_FOUND);
 
@@ -180,7 +181,7 @@ static BOOL MemStore_deleteCert(WINECRYPT_CERTSTORE *store, context_t *context)
 {
     WINE_MEMSTORE *ms = (WINE_MEMSTORE *)store;
 
-    if (ContextList_Remove(ms->certs, context))
+    if (ContextList_Remove(ms->certs, &ms->cs, context))
         Context_Release(context);
 
     return TRUE;
@@ -194,7 +195,7 @@ static BOOL MemStore_addCRL(WINECRYPT_CERTSTORE *store, context_t *crl,
 
     TRACE("(%p, %p, %p, %p)\n", store, crl, toReplace, ppStoreContext);
 
-    context = ContextList_Add(ms->crls, crl, toReplace, store, use_link);
+    context = ContextList_Add(ms->crls, &ms->cs, crl, toReplace, store, use_link);
     if (!context)
         return FALSE;
 
@@ -212,7 +213,7 @@ static context_t *MemStore_enumCRL(WINECRYPT_CERTSTORE *store, context_t *prev)
 
     TRACE("(%p, %p)\n", store, prev);
 
-    ret = ContextList_Enum(ms->crls, prev);
+    ret = ContextList_Enum(ms->crls, &ms->cs, prev);
     if (!ret)
         SetLastError(CRYPT_E_NOT_FOUND);
 
@@ -224,7 +225,7 @@ static BOOL MemStore_deleteCRL(WINECRYPT_CERTSTORE *store, context_t *context)
 {
     WINE_MEMSTORE *ms = (WINE_MEMSTORE *)store;
 
-    if (!ContextList_Remove(ms->crls, context))
+    if (!ContextList_Remove(ms->crls, &ms->cs, context))
         Context_Release(context);
 
     return TRUE;
@@ -238,7 +239,7 @@ static BOOL MemStore_addCTL(WINECRYPT_CERTSTORE *store, context_t *ctl,
 
     TRACE("(%p, %p, %p, %p)\n", store, ctl, toReplace, ppStoreContext);
 
-    context = ContextList_Add(ms->ctls, ctl, toReplace, store, use_link);
+    context = ContextList_Add(ms->ctls, &ms->cs, ctl, toReplace, store, use_link);
     if (!context)
         return FALSE;
 
@@ -256,7 +257,7 @@ static context_t *MemStore_enumCTL(WINECRYPT_CERTSTORE *store, context_t *prev)
 
     TRACE("(%p, %p)\n", store, prev);
 
-    ret = ContextList_Enum(ms->ctls, prev);
+    ret = ContextList_Enum(ms->ctls, &ms->cs, prev);
     if (!ret)
         SetLastError(CRYPT_E_NOT_FOUND);
 
@@ -268,7 +269,7 @@ static BOOL MemStore_deleteCTL(WINECRYPT_CERTSTORE *store, context_t *context)
 {
     WINE_MEMSTORE *ms = (WINE_MEMSTORE *)store;
 
-    if (!ContextList_Remove(ms->ctls, context))
+    if (!ContextList_Remove(ms->ctls, &ms->cs, context))
         Context_Release(context);
 
     return TRUE;
@@ -296,6 +297,8 @@ static DWORD MemStore_release(WINECRYPT_CERTSTORE *cert_store, DWORD flags)
     ContextList_Free(store->certs);
     ContextList_Free(store->crls);
     ContextList_Free(store->ctls);
+    store->cs.DebugInfo->Spare[0] = 0;
+    DeleteCriticalSection(&store->cs);
     CRYPT_FreeStore(&store->hdr);
     return ERROR_SUCCESS;
 }
@@ -345,6 +348,8 @@ static WINECRYPT_CERTSTORE *CRYPT_MemOpenStore(HCRYPTPROV hCryptProv,
         {
             memset(store, 0, sizeof(WINE_MEMSTORE));
             CRYPT_InitStore(&store->hdr, dwFlags, StoreTypeMem, &MemStoreVtbl);
+            InitializeCriticalSection(&store->cs);
+            store->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": ContextList.cs");
             store->certs = ContextList_Create();
             store->crls = ContextList_Create();
             store->ctls = ContextList_Create();




More information about the wine-cvs mailing list