- Repair GDI handle debugging functionality.

- Fix locking in NtGdiGetTextFace.

svn path=/trunk/; revision=15834
This commit is contained in:
Filip Navara 2005-06-07 20:02:22 +00:00
parent 7a4b2f8d8f
commit 7aea00d1d6
2 changed files with 20 additions and 1 deletions

View file

@ -559,6 +559,9 @@ LockHandle:
* 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 @@ GDIOBJ_LockObj (HGDIOBJ hObj, DWORD ObjectType)
{
GdiHdr->LockingThread = Thread;
GdiHdr->Locks = 1;
#ifdef GDI_DEBUG
GdiHdr->lockfile = file;
GdiHdr->lockline = line;
#endif
Object = HandleEntry->KernelData;
}
else
@ -925,7 +932,15 @@ GDIOBJ_ShareLockObj (HGDIOBJ hObj, DWORD ObjectType)
{
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

View file

@ -2564,6 +2564,7 @@ INT STDCALL
NtGdiGetTextFace(HDC hDC, INT Count, LPWSTR FaceName)
{
PDC Dc;
HFONT hFont;
PTEXTOBJ TextObj;
NTSTATUS Status;
@ -2573,11 +2574,14 @@ NtGdiGetTextFace(HDC hDC, INT Count, LPWSTR FaceName)
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);