diff --git a/gajim/common/client.py b/gajim/common/client.py index a172b93caee3ff09fb0a488841ac2cd2fc80ef78..ad72422502c8f86b6d3b2431de58ca809044d370 100644 --- a/gajim/common/client.py +++ b/gajim/common/client.py @@ -77,6 +77,8 @@ def __init__(self, account): self._ssl_errors = set() + self._destroyed = False + self.available_transports = {} modules.register_modules(self) @@ -120,6 +122,16 @@ def set_remove_account(self, value): self._remove_account = value def _create_client(self): + if self._destroyed: + # If we disable an account cleanup() is called and all + # modules are unregistered. Because disable_account() does not wait + # for the client to properly disconnect, handlers of the + # nbxmpp.Client() are emitted after we called cleanup(). + # After nbxmpp.Client() disconnects and is destroyed we create a + # new instance with this method but modules.get_handlers() fails + # because modules are already unregistered. + # TODO: Make this nicer + return log.info('Create new nbxmpp client') self._client = NBXMPPClient(log_context=self._account) self.connection = self._client @@ -518,6 +530,7 @@ def _disable_reconnect_timer(self): self._reconnect_timer_source = None def cleanup(self): + self._destroyed = True modules.unregister_modules(self) def quit(self, kill_core):