]> www.vanbest.org Git - motioneye-debian/commitdiff
fixed horrible mjpgclient close bug on tornado 2.x
authorCalin Crisan <ccrisan@gmail.com>
Mon, 20 Jan 2014 15:09:04 +0000 (17:09 +0200)
committerCalin Crisan <ccrisan@gmail.com>
Mon, 20 Jan 2014 15:09:04 +0000 (17:09 +0200)
src/mjpgclient.py

index 77933181272bad437d2bd0d8071bd261868b5356..6c8efe0076c47a7ba12e244ba2ea81235d19a9d8 100644 (file)
@@ -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)