Signed-off-by: Ankur Sharma <[email protected]>
---
datapath-windows/ovsext/User.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/datapath-windows/ovsext/User.c b/datapath-windows/ovsext/User.c
index a8d9107..42473ab 100644
--- a/datapath-windows/ovsext/User.c
+++ b/datapath-windows/ovsext/User.c
@@ -136,9 +136,21 @@ OvsSubscribeDpIoctl(PVOID instanceP,
POVS_USER_PACKET_QUEUE queue;
POVS_OPEN_INSTANCE instance = (POVS_OPEN_INSTANCE)instanceP;
+ OvsAcquireCtrlLock();
+ if (!gOvsSwitchContext) {
+ OvsReleaseCtrlLock();
+ return STATUS_INVALID_PARAMETER;
+ }
+
if (instance->packetQueue && !join) {
/* unsubscribe */
OvsCleanupPacketQueue(instance);
+
+ OvsAcquireCtrlLock();
+ /* Remove the instance from pidHashArray */
+ OvsDelPidInstance(gOvsSwitchContext, pid);
+ OvsReleaseCtrlLock();
+
} else if (instance->packetQueue == NULL && join) {
queue = (POVS_USER_PACKET_QUEUE) OvsAllocateMemory(sizeof *queue);
if (queue == NULL) {
@@ -153,10 +165,18 @@ OvsSubscribeDpIoctl(PVOID instanceP,
queue->instance = instance;
instance->packetQueue = queue;
NdisReleaseSpinLock(&queue->queueLock);
+
+ OvsAcquireCtrlLock();
+ /* Insert the instance to pidHashArray */
+ OvsAddPidInstance(gOvsSwitchContext, pid, instance);
+ OvsReleaseCtrlLock();
+
+
} else {
/* user mode should call only once for subscribe */
return STATUS_INVALID_PARAMETER;
}
+
return STATUS_SUCCESS;
}
--
1.9.1
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev