Jacek Caban : crypt32: Added addref to store vtbl and use it instead of directly accessing ref.

Alexandre Julliard julliard at winehq.org
Mon Oct 14 12:39:28 CDT 2013


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Oct 14 14:45:28 2013 +0200

crypt32: Added addref to store vtbl and use it instead of directly accessing ref.

---

 dlls/crypt32/collectionstore.c |    7 +++++++
 dlls/crypt32/crypt32_private.h |    1 +
 dlls/crypt32/provstore.c       |    7 +++++++
 dlls/crypt32/rootstore.c       |    2 +-
 dlls/crypt32/store.c           |    9 ++++++++-
 5 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/dlls/crypt32/collectionstore.c b/dlls/crypt32/collectionstore.c
index c60ca20..2278c4d 100644
--- a/dlls/crypt32/collectionstore.c
+++ b/dlls/crypt32/collectionstore.c
@@ -40,6 +40,12 @@ typedef struct _WINE_COLLECTIONSTORE
     struct list         stores;
 } WINE_COLLECTIONSTORE;
 
+static void Collection_addref(WINECRYPT_CERTSTORE *store)
+{
+    LONG ref = InterlockedIncrement(&store->ref);
+    TRACE("ref = %d\n", ref);
+}
+
 static void Collection_closeStore(WINECRYPT_CERTSTORE *store, DWORD dwFlags)
 {
     WINE_COLLECTIONSTORE *cs = (WINE_COLLECTIONSTORE*)store;
@@ -477,6 +483,7 @@ static BOOL Collection_control(WINECRYPT_CERTSTORE *cert_store, DWORD dwFlags,
 }
 
 static const store_vtbl_t CollectionStoreVtbl = {
+    Collection_addref,
     Collection_closeStore,
     Collection_control
 };
diff --git a/dlls/crypt32/crypt32_private.h b/dlls/crypt32/crypt32_private.h
index 3fa5d98..c939c5d 100644
--- a/dlls/crypt32/crypt32_private.h
+++ b/dlls/crypt32/crypt32_private.h
@@ -246,6 +246,7 @@ typedef struct _CONTEXT_PROPERTY_LIST CONTEXT_PROPERTY_LIST;
  */
 
 typedef struct {
+    void (*addref)(struct WINE_CRYPTCERTSTORE*);
     void (*closeStore)(struct WINE_CRYPTCERTSTORE*,DWORD);
     BOOL (*control)(struct WINE_CRYPTCERTSTORE*,DWORD,DWORD,void const*);
 } store_vtbl_t;
diff --git a/dlls/crypt32/provstore.c b/dlls/crypt32/provstore.c
index 38f0eab..06cfbc8 100644
--- a/dlls/crypt32/provstore.c
+++ b/dlls/crypt32/provstore.c
@@ -41,6 +41,12 @@ typedef struct _WINE_PROVIDERSTORE
     PFN_CERT_STORE_PROV_CONTROL     provControl;
 } WINE_PROVIDERSTORE;
 
+static void ProvStore_addref(WINECRYPT_CERTSTORE *store)
+{
+    LONG ref = InterlockedIncrement(&store->ref);
+    TRACE("ref = %d\n", ref);
+}
+
 static void ProvStore_closeStore(WINECRYPT_CERTSTORE *cert_store, DWORD dwFlags)
 {
     WINE_PROVIDERSTORE *store = (WINE_PROVIDERSTORE*)cert_store;
@@ -262,6 +268,7 @@ static BOOL ProvStore_control(WINECRYPT_CERTSTORE *cert_store, DWORD dwFlags, DW
 }
 
 static const store_vtbl_t ProvStoreVtbl = {
+    ProvStore_addref,
     ProvStore_closeStore,
     ProvStore_control
 };
diff --git a/dlls/crypt32/rootstore.c b/dlls/crypt32/rootstore.c
index ef0a0f7..efe8340 100644
--- a/dlls/crypt32/rootstore.c
+++ b/dlls/crypt32/rootstore.c
@@ -832,7 +832,7 @@ WINECRYPT_CERTSTORE *CRYPT_RootOpenStore(HCRYPTPROV hCryptProv, DWORD dwFlags)
         if (CRYPT_rootStore != root)
             CertCloseStore(root, 0);
     }
-    CertDuplicateStore(CRYPT_rootStore);
+    CRYPT_rootStore->vtbl->addref(CRYPT_rootStore);
     return CRYPT_rootStore;
 }
 
diff --git a/dlls/crypt32/store.c b/dlls/crypt32/store.c
index 0042d92..9623094 100644
--- a/dlls/crypt32/store.c
+++ b/dlls/crypt32/store.c
@@ -284,6 +284,12 @@ static BOOL CRYPT_MemDeleteCtl(WINECRYPT_CERTSTORE *store, void *pCtlContext)
     return ret;
 }
 
+static void MemStore_addref(WINECRYPT_CERTSTORE *store)
+{
+    LONG ref = InterlockedIncrement(&store->ref);
+    TRACE("ref = %d\n", ref);
+}
+
 static void MemStore_closeStore(WINECRYPT_CERTSTORE *cert_store, DWORD dwFlags)
 {
     WINE_MEMSTORE *store = (WINE_MEMSTORE*)cert_store;
@@ -306,6 +312,7 @@ static BOOL MemStore_control(WINECRYPT_CERTSTORE *store, DWORD dwFlags,
 }
 
 static const store_vtbl_t MemStoreVtbl = {
+    MemStore_addref,
     MemStore_closeStore,
     MemStore_control
 };
@@ -1213,7 +1220,7 @@ HCERTSTORE WINAPI CertDuplicateStore(HCERTSTORE hCertStore)
     TRACE("(%p)\n", hCertStore);
 
     if (hcs && hcs->dwMagic == WINE_CRYPTCERTSTORE_MAGIC)
-        InterlockedIncrement(&hcs->ref);
+        hcs->vtbl->addref(hcs);
     return hCertStore;
 }
 




More information about the wine-cvs mailing list