[Telepathy-commits] [telepathy-pinocchio/master] handle existing instances of the CM gracefully

Travis Reitter travis.reitter at collabora.co.uk
Tue Aug 19 10:35:37 PDT 2008


---
 libexec/telepathy-pinocchio     |   16 ++++++++++++----
 pinocchio/connection_manager.py |    9 ++++++++-
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/libexec/telepathy-pinocchio b/libexec/telepathy-pinocchio
index 0a38b69..40f47bd 100755
--- a/libexec/telepathy-pinocchio
+++ b/libexec/telepathy-pinocchio
@@ -20,11 +20,13 @@
 # 02110-1301 USA
 
 import gobject
-from dbus.mainloop.glib import DBusGMainLoop
+import dbus.mainloop.glib
+import dbus
+import sys
 
 import pinocchio as pin
 
-TIMEOUT_MS = 3000
+TIMEOUT_MS = 10000
 
 def assert_cm_connections(mainloop, manager):
     if len(manager._connections) <= 0:
@@ -34,9 +36,15 @@ def assert_cm_connections(mainloop, manager):
     return True
 
 if __name__ == '__main__':
-    DBusGMainLoop(set_as_default=True)
+    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+
+    manager = None
+    try:
+        manager = pin.ConnectionManager()
+    except dbus.NameExistsException:
+        print >> sys.stderr,'telepathy-pinocchio is already running; exiting...'
+        sys.exit(0)
 
-    manager = pin.ConnectionManager()
     mainloop = gobject.MainLoop()
     gobject.timeout_add(TIMEOUT_MS, assert_cm_connections, mainloop, manager)
 
diff --git a/pinocchio/connection_manager.py b/pinocchio/connection_manager.py
index 71346ba..055b33b 100644
--- a/pinocchio/connection_manager.py
+++ b/pinocchio/connection_manager.py
@@ -20,8 +20,8 @@
 import os.path
 import shutil
 from xml.dom import minidom
+import dbus
 import dbus.service
-
 import telepathy as tp
 
 import pinocchio as pin
@@ -38,6 +38,13 @@ class ConnectionManager(tp.server.ConnectionManager):
 
         self._protos[pin.common.PROTO_DEFAULT] = pin.connection.Connection
 
+        bus = dbus.SessionBus()
+
+        rv = bus.request_name(pin.common.CM_PINOCCHIO,
+                              dbus.bus.NAME_FLAG_DO_NOT_QUEUE)
+        if rv == dbus.bus.REQUEST_NAME_REPLY_EXISTS:
+            raise dbus.NameExistsException (pin.common.CM_PINOCCHIO)
+
     def GetParameters(self, proto):
         """Returns list of parameters for this protocol."""
 
-- 
1.5.6.3




More information about the Telepathy-commits mailing list