Author: dmeyer
Date: Wed Mar  5 17:03:26 2008
New Revision: 3164

Log:
some thread cleanup

Modified:
   trunk/base/src/net/mdns.py
   trunk/base/test/mdns.py

Modified: trunk/base/src/net/mdns.py
==============================================================================
--- trunk/base/src/net/mdns.py  (original)
+++ trunk/base/src/net/mdns.py  Wed Mar  5 17:03:26 2008
@@ -102,26 +102,17 @@
     def __init__(self):
         self._bus = None
         self._services = {}
-        self._announce = None
         self._provided = {}
         self._nextid = 0
         self._sync_running = False
         self._sync_required = False
         
-    @kaa.threaded(kaa.GOBJECT)
     def provide(self, name, type, port, txt):
         """
         Provide a service with the given name and type listening on the given
         port with additional information in the txt record. This function 
returns
-        an InProgress object with the id of the service to remove the service
-        later.
+        the id of the service to remove the service later.
         """
-        if self._bus is None:
-            self._dbus_connect()
-        if self._announce is None:
-            self._announce = dbus.Interface(
-                self._bus.get_object( avahi.DBUS_NAME, 
self._avahi.EntryGroupNew()),
-                avahi.DBUS_INTERFACE_ENTRY_GROUP)
         self._nextid += 1
         self._provided[self._nextid] = [
             avahi.IF_UNSPEC,            # interface
@@ -137,7 +128,6 @@
         self._sync()
         return self._nextid
 
-    @kaa.threaded(kaa.GOBJECT)
     def remove(self, id):
         """
         Remove a service.
@@ -147,11 +137,37 @@
             self._sync_required = True
             self._sync()
         
+    def get_type(self, service):
+        """
+        Get a ServiceList object for the given type.
+        e.g. get_type('_ssh._tcp')
+        """
+        if not service in self._services:
+            self._services[service] = ServiceList()
+            self._service_add_browser(service)
+        return self._services[service]
+
+    def _dbus_connect(self):
+        """
+        Connect to dbus and avahi. This is an internal function that has to be
+        called from a function running in the GOBJECT thread.
+        """
+        self._bus = dbus.SystemBus()
+        self._avahi = dbus.Interface(
+            self._bus.get_object( avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER ),
+            avahi.DBUS_INTERFACE_SERVER )
+        self._entrygroup = dbus.Interface(
+            self._bus.get_object( avahi.DBUS_NAME, 
self._avahi.EntryGroupNew()),
+            avahi.DBUS_INTERFACE_ENTRY_GROUP)
+        
+    @kaa.threaded(kaa.GOBJECT)
     def _sync(self):
         """
         Sync providing service list to avahi. This is an internal function that
         has to be called from a function running in the GOBJECT thread.
         """
+        if self._bus is None:
+            self._dbus_connect()
         # return if nothing to do
         if self._sync_running or not self._sync_required:
             return
@@ -163,12 +179,12 @@
         self._sync_running = True
         self._sync_required = False
         if not self._provided:
-            self._announce.Reset(**callbacks)
+            self._entrygroup.Reset(**callbacks)
             return
-        self._announce.Reset()
+        self._entrygroup.Reset()
         for service in self._provided.values():
-            self._announce.AddService(*service)
-        self._announce.Commit(**callbacks)
+            self._entrygroup.AddService(*service)
+        self._entrygroup.Commit(**callbacks)
 
     def _sync_finished(self, error=None):
         """
@@ -181,26 +197,6 @@
         self._sync_running = False
         self._sync()
             
-    def get_type(self, service):
-        """
-        Get a ServiceList object for the given type.
-        e.g. get_type('_ssh._tcp')
-        """
-        if not service in self._services:
-            self._services[service] = ServiceList()
-            self._service_add_browser(service)
-        return self._services[service]
-
-    def _dbus_connect(self):
-        """
-        Connect to dbus and avahi. This is an internal function that has to be
-        called from a function running in the GOBJECT thread.
-        """
-        self._bus = dbus.SystemBus()
-        self._avahi = dbus.Interface(
-            self._bus.get_object( avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER ),
-            avahi.DBUS_INTERFACE_SERVER )
-        
     @kaa.threaded(kaa.GOBJECT)
     def _service_add_browser(self, service):
         """

Modified: trunk/base/test/mdns.py
==============================================================================
--- trunk/base/test/mdns.py     (original)
+++ trunk/base/test/mdns.py     Wed Mar  5 17:03:26 2008
@@ -24,8 +24,12 @@
 if len(sys.argv) > 1:
     # go into provide mode
     # mdns.py ServiceName Port
-    mdns.provide(sys.argv[1], '_test._tcp', int(sys.argv[2]), {'foo': 
'bar'}).connect(provide_callback, 2)
-    mdns.provide(sys.argv[1] + 'x', '_test._tcp', int(sys.argv[2]), {'foo': 
'bar'}).connect(provide_callback, 5)
+    s1 = mdns.provide(sys.argv[1], '_test._tcp', int(sys.argv[2]), {'foo': 
'bar'})
+    s2 = mdns.provide(sys.argv[1] + 'x', '_test._tcp', int(sys.argv[2]), 
{'foo': 'bar'})
+
+    if 1:
+        kaa.OneShotTimer(mdns.remove, s1).start(5)
+        kaa.OneShotTimer(mdns.remove, s2).start(10)
 else:
     # go into listen mode
     # monitor printer

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to