- Repair GDI handle debugging functionality.
- Fix locking in NtGdiGetTextFace.
Modified: trunk/reactos/subsys/win32k/objects/gdiobj.c
Modified: trunk/reactos/subsys/win32k/objects/text.c
_____
Modified: trunk/reactos/subsys/win32k/objects/gdiobj.c
--- trunk/reactos/subsys/win32k/objects/gdiobj.c 2005-06-07
17:13:38 UTC (rev 15833)
+++ trunk/reactos/subsys/win32k/objects/gdiobj.c 2005-06-07
20:02:22 UTC (rev 15834)
@@ -559,6 +559,9 @@
* The object is currently locked, so freeing is forbidden!
*/
DPRINT1("GdiHdr->Locks: %d\n", GdiHdr->Locks);
+#ifdef GDI_DEBUG
+ DPRINT1("Locked from: %s:%d\n", GdiHdr->lockfile,
GdiHdr->lockline);
+#endif
ASSERT(FALSE);
}
}
@@ -781,6 +784,10 @@
{
GdiHdr->LockingThread = Thread;
GdiHdr->Locks = 1;
+#ifdef GDI_DEBUG
+ GdiHdr->lockfile = file;
+ GdiHdr->lockline = line;
+#endif
Object = HandleEntry->KernelData;
}
else
@@ -925,7 +932,15 @@
{
PGDIOBJHDR GdiHdr = GDIBdyToHdr(HandleEntry->KernelData);
+#ifdef GDI_DEBUG
+ if (InterlockedIncrement(&GdiHdr->Locks) == 1)
+ {
+ GdiHdr->lockfile = file;
+ GdiHdr->lockline = line;
+ }
+#else
InterlockedIncrement(&GdiHdr->Locks);
+#endif
Object = HandleEntry->KernelData;
}
else
_____
Modified: trunk/reactos/subsys/win32k/objects/text.c
--- trunk/reactos/subsys/win32k/objects/text.c 2005-06-07 17:13:38 UTC
(rev 15833)
+++ trunk/reactos/subsys/win32k/objects/text.c 2005-06-07 20:02:22 UTC
(rev 15834)
@@ -2564,6 +2564,7 @@
NtGdiGetTextFace(HDC hDC, INT Count, LPWSTR FaceName)
{
PDC Dc;
+ HFONT hFont;
PTEXTOBJ TextObj;
NTSTATUS Status;
@@ -2573,11 +2574,14 @@
SetLastWin32Error(ERROR_INVALID_HANDLE);
return FALSE;
}
- TextObj = TEXTOBJ_LockText(Dc->w.hFont);
+ hFont = Dc->w.hFont;
DC_UnlockDc(Dc);
+ TextObj = TEXTOBJ_LockText(Dc->w.hFont);
+ ASSERT(TextObj != NULL);
Count = min(Count, wcslen(TextObj->logfont.lfFaceName));
Status = MmCopyToCaller(FaceName, TextObj->logfont.lfFaceName, Count
* sizeof(WCHAR));
+ TEXTOBJ_UnlockText(TextObj);
if (!NT_SUCCESS(Status))
{
SetLastNtError(Status);
Show replies by date