From dca4a3538f86d8e2e957945a691430573192716d Mon Sep 17 00:00:00 2001
From: Yuri Konotopov <ykonotopov@gnome.org>
Date: Tue, 24 Jan 2017 19:42:19 +0400
Subject: [PATCH] connector: do not use get_dbus_connection after GApplication
 was released.

Fixes: https://github.com/nE0sIghT/chrome-gnome-shell-mirror/issues/27
---
 connector/chrome-gnome-shell.py | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/connector/chrome-gnome-shell.py b/connector/chrome-gnome-shell.py
index 0f6e5f1..ac6740a 100755
--- a/connector/chrome-gnome-shell.py
+++ b/connector/chrome-gnome-shell.py
@@ -106,21 +106,26 @@ def __init__(self, run_as_service):
             self.hold()
 
     # Is there any way to hook this to shutdown?
-    def cleanup(self):
-        debug('Cleanup')
+    def clean_release(self):
+        debug('Release')
 
         if self.shellAppearedId:
             Gio.bus_unwatch_name(self.shellAppearedId)
 
         if self.shellSignalId:
-            self.get_dbus_connection().signal_unsubscribe(self.shellSignalId)
+            dbus_connection = self.get_dbus_connection()
+
+            if dbus_connection is not None:
+                dbus_connection.signal_unsubscribe(self.shellSignalId)
+
+        self.release()
 
     def default_exception_hook(self, exception_type, value, tb):
         log_error("Uncaught exception of type %s occured" % exception_type)
         traceback.print_tb(tb)
         log_error("Exception: %s" % value)
 
-        self.release()
+        self.clean_release()
 
     def add_simple_action(self, name, callback, parameter_type):
         action = Gio.SimpleAction.new(
@@ -191,7 +196,7 @@ def on_notification_clicked(self, notification, notification_name):
     # noinspection PyUnusedLocal
     def on_service_timeout(self, data):
         debug('On service timeout')
-        self.release()
+        self.clean_release()
 
         return False
 
@@ -203,7 +208,7 @@ def on_input(self, source, condition, data):
 
         if len(text_length_bytes) == 0:
             debug('Release condition: %s' % str(condition))
-            self.release()
+            self.clean_release()
             return
 
         # Unpack message length as 4 byte integer.
@@ -255,14 +260,14 @@ def on_shell_appeared(self, connection, name, name_owner):
     # noinspection PyUnusedLocal
     def on_hup(self, source, condition, data):
         debug('On hup: %s' % str(condition))
-        self.release()
+        self.clean_release()
 
         return False
 
     # noinspection PyUnusedLocal
     def on_sigint(self, data):
         debug('On sigint')
-        self.release()
+        self.clean_release()
 
         return False
 
@@ -545,6 +550,5 @@ def check_update(self, update_url):
     app = ChromeGNOMEShell('--gapplication-service' in sys.argv)
 
     app.run(sys.argv)
-    app.cleanup()
 
     debug('Quit')
