https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9eca7c52f6be89edf2b9323f48a94133aa0dae78

commit 9eca7c52f6be89edf2b9323f48a94133aa0dae78
Author:     Timo Kreuzer <timo.kreu...@reactos.org>
AuthorDate: Mon Sep 25 20:12:51 2023 +0300
Commit:     Timo Kreuzer <timo.kreu...@reactos.org>
CommitDate: Sun Oct 20 09:35:14 2024 +0300

    [WIN32K] ASSERT that all callout references have been cleaned up on thread 
exit
---
 win32ss/user/ntuser/main.c   | 5 +++++
 win32ss/user/ntuser/object.h | 6 ++++++
 win32ss/user/ntuser/win32.h  | 1 +
 3 files changed, 12 insertions(+)

diff --git a/win32ss/user/ntuser/main.c b/win32ss/user/ntuser/main.c
index cb5dc019918..1e817ddc1c7 100644
--- a/win32ss/user/ntuser/main.c
+++ b/win32ss/user/ntuser/main.c
@@ -813,6 +813,9 @@ ExitThreadCallback(PETHREAD Thread)
             UserDereferenceObject(ref->obj);
 
             psle = PopEntryList(&ptiCurrent->ReferencesList);
+#if DBG
+            ptiCurrent->cRefObjectCo--;
+#endif
         }
     }
 
@@ -872,6 +875,8 @@ ExitThreadCallback(PETHREAD Thread)
     }
     ptiCurrent->hEventQueueClient = NULL;
 
+    ASSERT(ptiCurrent->cRefObjectCo == 0);
+
     /* The thread is dying */
     PsSetThreadWin32Thread(Thread /*ptiCurrent->pEThread*/, NULL, ptiCurrent);
 
diff --git a/win32ss/user/ntuser/object.h b/win32ss/user/ntuser/object.h
index 0d6bc6dda88..4a2891c5b82 100644
--- a/win32ss/user/ntuser/object.h
+++ b/win32ss/user/ntuser/object.h
@@ -34,6 +34,9 @@ UserRefObjectCo(PVOID obj, PUSER_REFERENCE_ENTRY 
UserReferenceEntry)
     UserReferenceEntry->obj = obj;
     UserReferenceObject(obj);
     PushEntryList(&W32Thread->ReferencesList, &UserReferenceEntry->Entry);
+#if DBG
+    W32Thread->cRefObjectCo++;
+#endif
 }
 
 static __inline VOID
@@ -53,6 +56,9 @@ UserDerefObjectCo(PVOID obj)
 
     ASSERT(obj == UserReferenceEntry->obj);
     UserDereferenceObject(obj);
+#if DBG
+    W32Thread->cRefObjectCo--;
+#endif
 }
 
 void FreeProcMarkObject(_In_ PVOID Object);
diff --git a/win32ss/user/ntuser/win32.h b/win32ss/user/ntuser/win32.h
index 9f97725ff6b..c4fc64570cd 100644
--- a/win32ss/user/ntuser/win32.h
+++ b/win32ss/user/ntuser/win32.h
@@ -158,6 +158,7 @@ typedef struct _THREADINFO
     ULONG cExclusiveLocks;
 #if DBG
     USHORT acExclusiveLockCount[GDIObjTypeTotal + 1];
+    UINT cRefObjectCo;
 #endif
 #endif // __cplusplus
 } THREADINFO;

Reply via email to