Author: arty Date: Wed Mar 4 20:03:06 2009 New Revision: 39873
URL: http://svn.reactos.org/svn/reactos?rev=39873&view=rev Log: Using a lock inside a slab of memory to lock against moving the same memory is definitely a bug. This fixes it, but the intention of the previous code might not be what I thought it was. I won't be sad if this fix is reverted and something else takes its place.
Modified: trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c
Modified: trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c... ============================================================================== --- trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c [iso-8859-1] Wed Mar 4 20:03:06 2009 @@ -29,6 +29,7 @@ /* DATA **********************************************************************/
PDRIVER_OBJECT IopRootDriverObject; +FAST_MUTEX IopBusTypeGuidListLock; PIO_BUS_TYPE_GUID_LIST IopBusTypeGuidList = NULL;
#if defined (ALLOC_PRAGMA) @@ -279,7 +280,7 @@ PVOID NewList;
/* Acquire the lock */ - ExAcquireFastMutex(&IopBusTypeGuidList->Lock); + ExAcquireFastMutex(&IopBusTypeGuidListLock);
/* Loop all entries */ while (i < IopBusTypeGuidList->GuidCount) @@ -333,7 +334,7 @@ IopBusTypeGuidList->GuidCount++;
Quickie: - ExReleaseFastMutex(&IopBusTypeGuidList->Lock); + ExReleaseFastMutex(&IopBusTypeGuidListLock); return FoundIndex; }
@@ -2843,7 +2844,8 @@ DPRINT("PnpInit()\n");
KeInitializeSpinLock(&IopDeviceTreeLock); - + ExInitializeFastMutex(&IopBusTypeGuidListLock); + /* Initialize the Bus Type GUID List */ IopBusTypeGuidList = ExAllocatePool(PagedPool, sizeof(IO_BUS_TYPE_GUID_LIST)); if (!IopBusTypeGuidList) {