datapath-windows: event read should not fail when no events
authorNithin Raju <nithin@vmware.com>
Sat, 18 Oct 2014 18:39:35 +0000 (11:39 -0700)
committerBen Pfaff <blp@nicira.com>
Tue, 21 Oct 2014 18:42:52 +0000 (11:42 -0700)
The semantics are read operation are generally to return 0 bytes and
STATUS_SUCCESS when there are no events.

Also, added a fix to assign the PID to the synthetic OVS_MESSAGE formed
for the command validation.

Signed-off-by: Nithin Raju <nithin@vmware.com>
Acked-by: Eitan Eliahu <eliahue@vmware.com>
Acked-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Signed-off-by: Ben Pfaff <blp@nicira.com>
datapath-windows/ovsext/Datapath.c

index 79e7c7d..281c3f6 100644 (file)
@@ -740,6 +740,7 @@ OvsDeviceControl(PDEVICE_OBJECT deviceObject,
 
         ovsMsg = &ovsMsgReadOp;
         ovsMsg->nlMsg.nlmsgType = OVS_WIN_NL_CTRL_FAMILY_ID;
+        ovsMsg->nlMsg.nlmsgPid = instance->pid;
         /* An "artificial" command so we can use NL family function table*/
         ovsMsg->genlMsg.cmd = (code == OVS_IOCTL_READ_EVENT) ?
                               OVS_CTRL_CMD_EVENT_NOTIFY :
@@ -2301,6 +2302,9 @@ OvsReadEventCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx,
     /* remove an event entry from the event queue */
     status = OvsRemoveEventEntry(usrParamsCtx->ovsInstance, &eventEntry);
     if (status != STATUS_SUCCESS) {
+        /* If there were not elements, read should return no data. */
+        status = STATUS_SUCCESS;
+        *replyLen = 0;
         goto cleanup;
     }