Unhandled exception on fd 9: <type 'exceptions.TypeError'> del_channel() takes exactly 1 argument (2 given) Traceback (most recent call last): File "/opt/thinlinc/modules/thinlinc/vsm/async.py", line 110, in iii11 obj . handle_read_event ( fd ) File "/opt/thinlinc/modules/thinlinc/vsm/async.py", line 507, in handle_read_event self . handle_accept ( ) File "/opt/thinlinc/modules/thinlinc/vsm/usersocketserver.py", line 120, in handle_accept UserSocketServerChannel ( self . vsmserver , I1i1I1II , self . uid ) File "/opt/thinlinc/modules/thinlinc/vsm/usersocketserverchannel.py", line 50, in __init__ timeout = O0o0o00o0Oo0 ) File "/opt/thinlinc/modules/thinlinc/vsm/xmlrpc.py", line 469, in __init__ reregister_sock = reregister_sock ) File "/opt/thinlinc/modules/thinlinc/vsm/xmlrpc.py", line 123, in __init__ async_chat . __init__ ( self , sock ) File "/usr/lib/python2.6/asynchat.py", line 79, in __init__ asyncore.dispatcher.__init__ (self, sock, map) File "/usr/lib/python2.6/asyncore.py", line 245, in __init__ self.del_channel(map) TypeError: del_channel() takes exactly 1 argument (2 given) I guess this is since we define del_channel(self) where it should be del_channel(self, map=None) as per Python's asyncore module. Not sure why/how this was omitted.
Another part of this bug is that we call async_chat.__init__ in XMLRPCChannel before we have initialised the timeout_call variable. This results in a traceback like so: Unhandled exception on fd 8: <type 'exceptions.AttributeError'> timeout_call Traceback (most recent call last): File "/opt/thinlinc/modules/thinlinc/vsm/async.py", line 110, in iii11 obj . handle_read_event ( fd ) File "/opt/thinlinc/modules/thinlinc/vsm/async.py", line 507, in handle_read_event self . handle_accept ( ) File "/opt/thinlinc/modules/thinlinc/vsm/usersocketserver.py", line 120, in handle_accept UserSocketServerChannel ( self . vsmserver , I1i1I1II , self . uid ) File "/opt/thinlinc/modules/thinlinc/vsm/usersocketserverchannel.py", line 50, in __init__ timeout = O0o0o00o0Oo0 ) File "/opt/thinlinc/modules/thinlinc/vsm/xmlrpc.py", line 472, in __init__ reregister_sock = reregister_sock ) File "/opt/thinlinc/modules/thinlinc/vsm/xmlrpc.py", line 123, in __init__ async_chat . __init__ ( self , sock ) File "/usr/lib/python2.6/asynchat.py", line 79, in __init__ asyncore.dispatcher.__init__ (self, sock, map) File "/usr/lib/python2.6/asyncore.py", line 245, in __init__ self.del_channel(map) File "/opt/thinlinc/modules/thinlinc/vsm/xmlrpc.py", line 194, in del_channel self . cancel_timeout ( ) File "/opt/thinlinc/modules/thinlinc/vsm/xmlrpc.py", line 150, in cancel_timeout if self . timeout_call : File "/opt/thinlinc/modules/thinlinc/vsm/xmlrpc.py", line 140, in __getattr__ raise AttributeError , attr AttributeError: timeout_call
Code review. Looks fine.