Author: navaraf
Date: Sun May 11 04:47:57 2008
New Revision: 33429
URL: http://svn.reactos.org/svn/reactos?rev=33429&view=rev
Log:
A driver-supplied Cancel routine is called with the cancel spin lock held, it must be released on IRP completion. Patch by R.T.Sivakumar <rtshiva(a)gmail.com>.
Modified:
trunk/reactos/drivers/input/kbdclass/kbdclass.c
Modified: trunk/reactos/drivers/input/kbdclass/kbdclass.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/input/kbdclass/kbd…
==============================================================================
--- trunk/reactos/drivers/input/kbdclass/kbdclass.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/input/kbdclass/kbdclass.c [iso-8859-1] Sun May 11 04:47:57 2008
@@ -729,8 +729,8 @@
ASSERT(ClassDeviceExtension->Common.IsClassDO);
+ IoReleaseCancelSpinLock(Irp->CancelIrql);
KeAcquireSpinLock(&ClassDeviceExtension->SpinLock, &OldIrql);
- IoAcquireCancelSpinLock(&OldIrql);
if (ClassDeviceExtension->PendingIrp == Irp)
{
ClassDeviceExtension->PendingIrp = NULL;
Author: greatlrd
Date: Sun May 11 03:20:18 2008
New Revision: 33427
URL: http://svn.reactos.org/svn/reactos?rev=33427&view=rev
Log:
Remove old hack I implmeneted in NtGdiCreateBitmap it is height == 0 or width == 0, it create 1x1 1Bpp we can remove this hack now.
BugFix CreateBitmapIndirect, the code have been tested in reactos and windows, include abiword
1. the bmWidthBytes must be align with 2 and it must be 2 or higher like windows xp/2003 and msdn
2. Do not do direcly call to NtGdiCreateBitmap use CreateBitmap so we getting same behoir for 1x1 1Bpp bitmap.
3. This will also take care of handle leaks for bitmap that being create with height = 0, width = 0 and do not delete the object.
4. Windowss does not check if the incoming bitmap is NULL, this behoir to make it more compatible.
Modified:
trunk/reactos/dll/win32/gdi32/objects/bitmap.c
trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c
Modified: trunk/reactos/dll/win32/gdi32/objects/bitmap.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdi32/objects/bi…
==============================================================================
--- trunk/reactos/dll/win32/gdi32/objects/bitmap.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/gdi32/objects/bitmap.c [iso-8859-1] Sun May 11 03:20:18 2008
@@ -187,15 +187,22 @@
HBITMAP WINAPI
CreateBitmapIndirect(const BITMAP *pbm)
{
- if (pbm)
+ HBITMAP bitmap = NULL;
+
+ /* Note windows xp/2003 does not check if pbm is NULL or not */
+ if ( (pbm->bmWidthBytes != 0) &&
+ (!(pbm->bmWidthBytes & 1)) )
+
{
- return NtGdiCreateBitmap(pbm->bmWidth,
- pbm->bmHeight,
- pbm->bmPlanes,
- pbm->bmBitsPixel,
- pbm->bmBits);
+
+ bitmap = CreateBitmap(pbm->bmWidth,
+ pbm->bmHeight,
+ pbm->bmPlanes,
+ pbm->bmBitsPixel,
+ pbm->bmBits);
}
- return NULL;
+
+ return bitmap;
}
HBITMAP WINAPI
Modified: trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c [iso-8859-1] Sun May 11 03:20:18 2008
@@ -112,14 +112,8 @@
ProbeForRead(pUnsafeBits, cjBits, 1);
}
- if (0 == Width || 0 == Height)
- {
- hBitmap = IntGdiCreateBitmap (1, 1, 1, 1, NULL);
- }
- else
- {
- hBitmap = IntGdiCreateBitmap(Width, Height, Planes, BitsPixel, pUnsafeBits);
- }
+ hBitmap = IntGdiCreateBitmap(Width, Height, Planes, BitsPixel, pUnsafeBits);
+
}
_SEH_HANDLE
{