Fix ref counting bug
Modified: trunk/reactos/subsys/win32k/ntuser/cursoricon.c

Modified: trunk/reactos/subsys/win32k/ntuser/cursoricon.c
--- trunk/reactos/subsys/win32k/ntuser/cursoricon.c	2005-01-03 05:17:16 UTC (rev 12748)
+++ trunk/reactos/subsys/win32k/ntuser/cursoricon.c	2005-01-03 09:46:31 UTC (rev 12749)
@@ -343,21 +343,25 @@
   {
     Object = CONTAINING_RECORD(CurrentEntry, CURICON_OBJECT, ListEntry);
     CurrentEntry = CurrentEntry->Flink;
-    if((Object->hModule == hModule) && (Object->hRsrc == hRsrc))
+    if(NT_SUCCESS(ObmReferenceObjectByPointer(Object, otCursorIcon)))
     {
-      if(cx && ((cx != Object->Size.cx) || (cy != Object->Size.cy)))
+      if((Object->hModule == hModule) && (Object->hRsrc == hRsrc))
       {
-        ObmDereferenceObject(Object);
-	continue;
-      }
-      if (! ReferenceCurIconByProcess(Object))
-      {
+        if(cx && ((cx != Object->Size.cx) || (cy != Object->Size.cy)))
+        {
+          ObmDereferenceObject(Object);
+          continue;
+        }
+        if (! ReferenceCurIconByProcess(Object))
+        {
+          ExReleaseFastMutex(&CurIconListLock);
+          return NULL;
+        }
         ExReleaseFastMutex(&CurIconListLock);
-        return NULL;
+        return Object;
       }
-      ExReleaseFastMutex(&CurIconListLock);
-      return Object;
     }
+    ObmDereferenceObject(Object);
   }
   
   ExReleaseFastMutex(&CurIconListLock);