[PATCH] Remove potential reference count races

max at mtew.isa-geek.net max at mtew.isa-geek.net
Sat Oct 27 20:59:24 CDT 2012


From: Max TenEyck Woodbury <max at mtew.isa-geek.net>

---
 dlls/krnl386.exe16/atom.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/dlls/krnl386.exe16/atom.c b/dlls/krnl386.exe16/atom.c
index 0c52f1f..234c4b7 100644
--- a/dlls/krnl386.exe16/atom.c
+++ b/dlls/krnl386.exe16/atom.c
@@ -108,7 +108,7 @@ static WORD ATOM_Hash(
 
     TRACE("%x, %s, %x\n", entries, str, len);
 
-    for (i = 0; i < len; i++) hash ^= toupper(str[i]) + i;
+    for (i = 0; i < len; ++i) hash ^= toupper(str[i]) + i;
     return hash % entries;
 }
 
@@ -126,7 +126,7 @@ static BOOL ATOM_IsIntAtomA(LPCSTR atomstr,WORD *atomid)
         while (*atomstr >= '0' && *atomstr <= '9')
         {
             atom = atom * 10 + *atomstr - '0';
-            atomstr++;
+            ++atomstr;
         }
         if (*atomstr) return FALSE;
     }
@@ -167,7 +167,7 @@ WORD WINAPI InitAtomTable16( WORD entries )
     if (!handle) return 0;
     table = MapSL( MAKESEGPTR( CURRENT_DS, handle ) );
     table->size = entries;
-    for (i = 0; i < entries; i++) table->entries[i] = 0;
+    for (i = 0; i < entries; ++i) table->entries[i] = 0;
 
       /* Store a pointer to the table in the instance data */
 
@@ -225,7 +225,7 @@ ATOM WINAPI AddAtom16( LPCSTR str )
         if ((entryPtr->length == len) &&
             (!strncasecmp( entryPtr->str, buffer, len )))
         {
-            entryPtr->refCount++;
+            InterlockedIncrement(&entryPtr->refCount);
             TRACE("-- existing 0x%x\n", entry);
             return HANDLETOATOM( entry );
         }
@@ -280,7 +280,7 @@ ATOM WINAPI DeleteAtom16( ATOM atom )
     if (!*prevEntry) return atom;
 
     /* Delete atom */
-    if (--entryPtr->refCount == 0)
+    if (InterlockedDecrement(&entryPtr->refCount) == 0)
     {
         *prevEntry = entryPtr->next;
         LocalFree16( entry );
-- 
1.7.7.6




More information about the wine-patches mailing list