diff -up system-config-printer-1.2.0/asyncipp.py.asyncipp-traceback system-config-printer-1.2.0/asyncipp.py --- system-config-printer-1.2.0/asyncipp.py.asyncipp-traceback 2010-03-26 10:26:00.420734896 +0000 +++ system-config-printer-1.2.0/asyncipp.py 2010-03-26 10:26:03.187725661 +0000 @@ -59,6 +59,7 @@ class _IPPConnectionThread(threading.Thr self._auth_handler = auth_handler self._auth_queue = Queue.Queue (1) self.user = None + self._destroyed = False debugprint ("+%s" % self) def __del__ (self): @@ -157,6 +158,7 @@ class _IPPConnectionThread(threading.Thr self._queue.task_done () debugprint ("Thread exiting") + self._destroyed = True del self._conn # already destroyed del self._reply_handler del self._error_handler @@ -189,18 +191,20 @@ class _IPPConnectionThread(threading.Thr def _reply (self, result): def send_reply (result): - self._reply_handler (self._conn, result) + if not self._destroyed and self._reply_handler: + self._reply_handler (self._conn, result) return False - if self._reply_handler: + if not self._destroyed and self._reply_handler: gobject.idle_add (send_reply, result) def _error (self, exc): def send_error (exc): - self._error_handler (self._conn, exc) + if not self._destroyed and self._error_handler: + self._error_handler (self._conn, exc) return False - if self._error_handler: + if not self._destroyed and self._error_handler: debugprint ("Add %s to idle" % self._error_handler) gobject.idle_add (send_error, exc)