Signed-off-by: Ankur Sharma <ankursha...@vmware.com> --- 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 dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev