The code expects synchronous behaviour here, so until a better solution exists, IoSyn...
authorAleksey Bragin <aleksey@reactos.org>
Wed, 22 Nov 2006 10:15:51 +0000 (10:15 +0000)
committerAleksey Bragin <aleksey@reactos.org>
Wed, 22 Nov 2006 10:15:51 +0000 (10:15 +0000)
This fixes the "Loading ndis.sys" problems.

Thanks to Dmitry Gorbachev, confirmed by Herve Poussineau.
See issue #1875 for more details.

svn path=/trunk/; revision=24798

reactos/ntoskrnl/io/pnpmgr/pnpmgr.c

index d421b4a..77a470d 100644 (file)
@@ -43,6 +43,13 @@ IopInvalidateDeviceRelations(
     IN PDEVICE_OBJECT DeviceObject,
     IN PVOID InvalidateContext);
 
     IN PDEVICE_OBJECT DeviceObject,
     IN PVOID InvalidateContext);
 
+VOID
+NTAPI
+IoSynchronousInvalidateDeviceRelations(
+    IN PDEVICE_OBJECT DeviceObject,
+    IN DEVICE_RELATION_TYPE Type);
+
+
 /* FUNCTIONS *****************************************************************/
 
 PDEVICE_NODE
 /* FUNCTIONS *****************************************************************/
 
 PDEVICE_NODE
@@ -144,7 +151,9 @@ IopStartDevice(
          if (IopDeviceNodeHasFlag(DeviceNode, DNF_NEED_ENUMERATION_ONLY))
       {
          DPRINT("Device needs enumeration, invalidating bus relations\n");
          if (IopDeviceNodeHasFlag(DeviceNode, DNF_NEED_ENUMERATION_ONLY))
       {
          DPRINT("Device needs enumeration, invalidating bus relations\n");
-         IoInvalidateDeviceRelations(DeviceNode->PhysicalDeviceObject, BusRelations);
+         /* Invalidate device relations synchronously
+            (otherwise there will be dirty read of DeviceNode) */
+         IoSynchronousInvalidateDeviceRelations(DeviceNode->PhysicalDeviceObject, BusRelations);
          IopDeviceNodeClearFlag(DeviceNode, DNF_NEED_ENUMERATION_ONLY);
       }
    }
          IopDeviceNodeClearFlag(DeviceNode, DNF_NEED_ENUMERATION_ONLY);
       }
    }