[bus] Add an internal-use WvBusRemoveNode_ function
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Fri, 24 Dec 2010 01:43:51 +0000 (20:43 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Fri, 24 Dec 2010 01:43:51 +0000 (20:43 -0500)
Called by WvBusProcessWorkItems() to remove a node.

src/winvblock/bus/bus.c

index ca86bdf..c3fc4f6 100644 (file)
@@ -459,6 +459,26 @@ static void STDCALL WvBusAddNode_(WV_SP_BUS_T bus, WV_SP_BUS_NODE new_node) {
     return;
   }
 
+/**
+ * Remove a PDO node from a bus.  Internal.
+ *
+ * @v bus             The bus to remove the node from.
+ * @v node            The PDO node to remove from its parent bus.
+ *
+ * Don't call this function yourself.  It expects to have exclusive
+ * access to the bus' list of children.
+ */
+static void STDCALL WvBusRemoveNode_(
+    WV_SP_BUS_T bus,
+    WV_SP_BUS_NODE node
+  ) {
+    DBG("Removing PDO from bus...\n");
+    RemoveEntryList(&node->BusPrivate_.Link);
+    ObDereferenceObject(node->BusPrivate_.Pdo);
+    bus->BusPrivate_.NodeCount--;
+    return;    
+  }
+
 /**
  * Process work items for a bus.
  *
@@ -480,12 +500,8 @@ winvblock__lib_func void WvBusProcessWorkItems(WV_SP_BUS_T Bus) {
               break;
 
             case WvBusWorkItemCmdRemovePdo_:
-              DBG("Removing PDO from bus...\n");
-
               node = work_item->Context.Node;
-              RemoveEntryList(&node->BusPrivate_.Link);
-              ObDereferenceObject(node->BusPrivate_.Pdo);
-              Bus->BusPrivate_.NodeCount--;
+              WvBusRemoveNode_(Bus, node);
               break;
 
             case WvBusWorkItemCmdProcessIrp_: