Vinzenz Feenstra has uploaded a new change for review.
Change subject: virt: Ensure not to handle no longer tacked fds in epoll
......................................................................
virt: Ensure not to handle no longer tacked fds in epoll
In some cases it is possible that events from epoll are received before the
socket is closed. This patch ensures that we're still tracking the fd for
which we're receiving the event.
Change-Id: Idde0f89d2859107dd1bb697d1753709137335677
Bug-Url:
https://bugzilla.redhat.com/1102072
Signed-off-by: Vinzenz Feenstra <vfeenstr(a)redhat.com>
---
M vdsm/virt/vmchannels.py
1 file changed, 13 insertions(+), 9 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/79/28179/1
diff --git a/vdsm/virt/vmchannels.py b/vdsm/virt/vmchannels.py
index d31cd47..67fb602 100644
--- a/vdsm/virt/vmchannels.py
+++ b/vdsm/virt/vmchannels.py
@@ -58,15 +58,19 @@
self.log.debug("Received %.08X. On fd removed by epoll.",
event)
elif (event & select.EPOLLIN):
- obj = self._channels[fileno]
- obj['reconnects'] = 0
- try:
- if obj['read_cb'](obj['opaque']):
- obj['read_time'] = time.time()
- else:
- reconnect = True
- except:
- self.log.exception("Exception on read callback.")
+ obj = self._channels.get(fileno, None)
+ if obj:
+ obj['reconnects'] = 0
+ try:
+ if obj['read_cb'](obj['opaque']):
+ obj['read_time'] = time.time()
+ else:
+ reconnect = True
+ except:
+ self.log.exception("Exception on read callback.")
+ else:
+ self.log.debug("Received epoll event %.08X for no longer "
+ "untracked fd = %d", event, fileno)
if reconnect:
self._prepare_reconnect(fileno)
--
To view, visit
http://gerrit.ovirt.org/28179
To unsubscribe, visit
http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Idde0f89d2859107dd1bb697d1753709137335677
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Vinzenz Feenstra <vfeenstr(a)redhat.com>