From c77754b87dbbf580ad792f3c6cc547c0b0cb0f08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Tue, 1 Mar 2011 21:45:45 +0000 Subject: [PATCH] [WIN32K] - only lock DC if asked to in NtGdiSetDIBits. svn path=/trunk/; revision=50948 --- .../subsystems/win32/win32k/objects/dibobj.c | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index 4a5ec9dd938..84eac972fb0 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -336,7 +336,7 @@ NtGdiSetDIBits( CONST BITMAPINFO *bmi, UINT ColorUse) { - PDC Dc; + PDC Dc = NULL; INT Ret; NTSTATUS Status = STATUS_SUCCESS; @@ -364,21 +364,25 @@ NtGdiSetDIBits( return 0; } - Dc = DC_LockDc(hDC); - if (NULL == Dc) + /* Lock DC if asked to */ + if(ColorUse == DIB_PAL_COLORS) { - EngSetLastError(ERROR_INVALID_HANDLE); - return 0; - } - if (Dc->dctype == DC_TYPE_INFO) - { - DC_UnlockDc(Dc); - return 0; + Dc = DC_LockDc(hDC); + if (NULL == Dc) + { + EngSetLastError(ERROR_INVALID_HANDLE); + return 0; + } + if (Dc->dctype == DC_TYPE_INFO) + { + DC_UnlockDc(Dc); + return 0; + } } Ret = IntSetDIBits(Dc, hBitmap, StartScan, ScanLines, Bits, bmi, ColorUse); - DC_UnlockDc(Dc); + if(Dc) DC_UnlockDc(Dc); return Ret; }