At the moment the sockets on Windows use the same events that are being created for the pipes.
This is not correct because they should be different events. This patch introduces a new event which should be used for sockets. The new event needs to be set on automatic reset with its initial state not signaled. Signed-off-by: Alin Balutoiu <abalut...@cloudbasesolutions.com> Co-authored-by: Alin Gabriel Serdean <aserd...@ovn.org> Signed-off-by: Alin Gabriel Serdean <aserd...@ovn.org> --- python/ovs/stream.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/python/ovs/stream.py b/python/ovs/stream.py index 717ea18..9d0536d 100644 --- a/python/ovs/stream.py +++ b/python/ovs/stream.py @@ -102,10 +102,6 @@ class Stream(object): self.socket = socket self.pipe = pipe if sys.platform == 'win32': - self._read = pywintypes.OVERLAPPED() - self._read.hEvent = winutils.get_new_event() - self._write = pywintypes.OVERLAPPED() - self._write.hEvent = winutils.get_new_event() if pipe is not None: # Flag to check if fd is a server HANDLE. In the case of a # server handle we have to issue a disconnect before closing @@ -114,6 +110,13 @@ class Stream(object): suffix = name.split(":", 1)[1] suffix = ovs.util.abs_file_name(ovs.dirs.RUNDIR, suffix) self._pipename = winutils.get_pipe_name(suffix) + self._read = pywintypes.OVERLAPPED() + self._read.hEvent = winutils.get_new_event() + self._write = pywintypes.OVERLAPPED() + self._write.hEvent = winutils.get_new_event() + else: + self._wevent = winutils.get_new_event(bManualReset=False, + bInitialState=False) self.name = name if status == errno.EAGAIN: @@ -459,24 +462,24 @@ class Stream(object): win32file.FD_CLOSE) try: win32file.WSAEventSelect(self.socket, - self._read.hEvent, + self._wevent, read_flags) except pywintypes.error as e: vlog.err("failed to associate events with socket: %s" % e.strerror) - poller.fd_wait(self._read.hEvent, ovs.poller.POLLIN) + poller.fd_wait(self._wevent, ovs.poller.POLLIN) else: write_flags = (win32file.FD_WRITE | win32file.FD_CONNECT | win32file.FD_CLOSE) try: win32file.WSAEventSelect(self.socket, - self._write.hEvent, + self._wevent, write_flags) except pywintypes.error as e: vlog.err("failed to associate events with socket: %s" % e.strerror) - poller.fd_wait(self._write.hEvent, ovs.poller.POLLOUT) + poller.fd_wait(self._wevent, ovs.poller.POLLOUT) else: if wait == Stream.W_RECV: if self._read: -- 2.10.0.windows.1 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev