From e494cea79964c954b5561fce78462e9a350df91f Mon Sep 17 00:00:00 2001 From: Calin Crisan Date: Mon, 20 Jan 2014 17:09:04 +0200 Subject: [PATCH] fixed horrible mjpgclient close bug on tornado 2.x --- src/mjpgclient.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/mjpgclient.py b/src/mjpgclient.py index 7793318..6c8efe0 100644 --- a/src/mjpgclient.py +++ b/src/mjpgclient.py @@ -40,6 +40,8 @@ class MjpgClient(iostream.IOStream): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) iostream.IOStream.__init__(self, s) + self.set_close_callback(self.on_close) + def connect(self): iostream.IOStream.connect(self, ('localhost', self._port), self._on_connect) MjpgClient.clients[self._camera_id] = self @@ -47,7 +49,10 @@ class MjpgClient(iostream.IOStream): logging.debug('mjpg client for camera %(camera_id)s connecting on port %(port)s...' % { 'port': self._port, 'camera_id': self._camera_id}) - def close(self, exc_info=False): + def on_close(self): + logging.debug('connection closed for mjpg client for camera %(camera_id)s on port %(port)s' % { + 'port': self._port, 'camera_id': self._camera_id}) + if MjpgClient.clients.pop(self._camera_id, None): MjpgClient.last_access.pop(self._camera_id, None) MjpgClient.last_jpg_moment.pop(self._camera_id, None) @@ -55,12 +60,6 @@ class MjpgClient(iostream.IOStream): logging.debug('mjpg client for camera %(camera_id)s on port %(port)s removed' % { 'port': self._port, 'camera_id': self._camera_id}) - try: - iostream.IOStream.close(self, exc_info=exc_info) - - except: - pass # already closed, nevermind - def _check_error(self): if self.socket is None: logging.warning('mjpg client connection for camera %(camera_id)s on port %(port)s is closed' % { @@ -71,7 +70,7 @@ class MjpgClient(iostream.IOStream): return True error = getattr(self, 'error', None) - if error is None: + if (error is None) or (getattr(error, 'errno', None) == 0): # error could also be ESUCCESS for some reason return False self._error(error) -- 2.39.5