Fix race in IMAPIProp_Release(), -W fixes.
authorJon Griffiths <jon_p_griffiths@yahoo.com>
Tue, 22 Feb 2005 14:51:03 +0000 (14:51 +0000)
committerAlexandre Julliard <julliard@winehq.org>
Tue, 22 Feb 2005 14:51:03 +0000 (14:51 +0000)
dlls/mapi32/prop.c

index d4f02d1820c8930e94a3e060f23b88eaac598516..e8e316e55ba3da312e11946cb46d85a37a5f1346 100644 (file)
@@ -795,7 +795,8 @@ SCODE WINAPI ScCopyProps(int cValues, LPSPropValue lpProps, LPVOID lpDst, ULONG
 {
     LPSPropValue lpDest = (LPSPropValue)lpDst;
     char *lpDataDest = (char *)(lpDest + cValues);
-    ULONG ulLen, i, iter;
+    ULONG ulLen, i;
+    int iter;
 
     TRACE("(%d,%p,%p,%p)\n", cValues, lpProps, lpDst, lpCount);
 
@@ -930,7 +931,8 @@ SCODE WINAPI ScRelocProps(int cValues, LPSPropValue lpProps, LPVOID lpOld,
     static const BOOL bBadPtr = TRUE; /* Windows bug - Assumes source is bad */
     LPSPropValue lpDest = (LPSPropValue)lpProps;
     ULONG ulCount = cValues * sizeof(SPropValue);
-    ULONG ulLen, i, iter;
+    ULONG ulLen, i;
+    int iter;
 
     TRACE("(%d,%p,%p,%p,%p)\n", cValues, lpProps, lpOld, lpNew, lpCount);
 
@@ -1520,7 +1522,7 @@ static inline ULONG WINAPI IMAPIProp_fnAddRef(LPMAPIPROP iface)
 {
     IPropDataImpl *This = (IPropDataImpl*)iface;
 
-    TRACE("(%p)->(count=%ld)\n", This, This->lRef);
+    TRACE("(%p)->(count before=%lu)\n", This, This->lRef);
 
     return InterlockedIncrement(&This->lRef);
 }
@@ -1534,10 +1536,12 @@ static inline ULONG WINAPI IMAPIProp_fnAddRef(LPMAPIPROP iface)
 static inline ULONG WINAPI IMAPIProp_fnRelease(LPMAPIPROP iface)
 {
     IPropDataImpl *This = (IPropDataImpl*)iface;
+    LONG lRef;
 
-    TRACE("(%p)->()\n", This);
+    TRACE("(%p)->(count before=%lu)\n", This, This->lRef);
 
-    if (!InterlockedDecrement(&This->lRef))
+    lRef = InterlockedDecrement(&This->lRef);
+    if (!lRef)
     {
         TRACE("Destroying IPropData (%p)\n",This);
 
@@ -1552,9 +1556,8 @@ static inline ULONG WINAPI IMAPIProp_fnRelease(LPMAPIPROP iface)
         }
         RtlDeleteCriticalSection(&This->cs);
         This->lpFree(This);
-        return 0U;
     }
-    return (ULONG)This->lRef;
+    return (ULONG)lRef;
 }
 
 /**************************************************************************