chiark / gitweb /
Fix some format and other varargs errors.
[tripe] / mon / tripemon.in
index b898ec98721fea08c2fbb8a6451f4a596edf01d1..4b8dd24fb6d7d8a6fe527af6f4fc61fe41c633f3 100644 (file)
@@ -83,13 +83,15 @@ def invoker(func, *args, **kw):
 
 def cr(func, *args, **kw):
   """Return a function which invokes FUNC(*ARGS, **KW) in a coroutine."""
-  def _(*hunoz, **hukairz):
-    T.Coroutine(xwrap(func)).switch(*args, **kw)
-  return _
+  name = T.funargstr(func, args, kw)
+  return lambda *hunoz, **hukairz: \
+         T.Coroutine(xwrap(func), name = name).switch(*args, **kw)
 
 def incr(func):
   """Decorator: runs its function in a coroutine of its own."""
-  return lambda *args, **kw: T.Coroutine(func).switch(*args, **kw)
+  return lambda *args, **kw: \
+         (T.Coroutine(func, name = T.funargstr(func, args, kw))
+          .switch(*args, **kw))
 
 ###--------------------------------------------------------------------------
 ### Random bits of infrastructure.
@@ -291,7 +293,13 @@ class Peer (MonitorObject):
 
   def update(me, hunoz = None):
     """Update the peer, fetching information about it from the server."""
-    addr = conn.addr(me.name)
+    me._setaddr(me, conn.addr(me.name))
+    me.ifname = conn.ifname(me.name)
+    me.__dict__.update(conn.peerinfo(me.name))
+    me.changehook.run()
+
+  def _setaddr(me, addr):
+    """Set the peer's address."""
     if addr[0] == 'INET':
       ipaddr, port = addr[1:]
       try:
@@ -301,8 +309,10 @@ class Peer (MonitorObject):
         me.addr = 'INET %s:%s' % (ipaddr, port)
     else:
       me.addr = ' '.join(addr)
-    me.ifname = conn.ifname(me.name)
-    me.__dict__.update(conn.peerinfo(me.name))
+
+  def setaddr(me, addr):
+    """Informs the object of a change to its address to ADDR."""
+    me._setaddr(addr)
     me.changehook.run()
 
   def setifname(me, newname):
@@ -474,6 +484,11 @@ class Monitor (HookClient):
         me.peers[rest[0]].setifname(rest[2])
       except KeyError:
         pass
+    elif code == 'NEWADDR':
+      try:
+        me.peers[rest[0]].setaddr(rest[1:])
+      except KeyError:
+        pass
     elif code == 'SVCCLAIM':
       T.aside(me.services.add, rest[0], rest[1])
       if rest[0] == 'connect':
@@ -1287,7 +1302,8 @@ class PeerWindow (MyWindow):
   def tryupdate(me):
     """Start the updater coroutine, if it's not going already."""
     if me.cr is None:
-      me.cr = T.Coroutine(me._update)
+      me.cr = T.Coroutine(me._update,
+                          name = 'update-peer-window %s' % me.peer.name)
       me.cr.switch()
 
   def stopupdate(me, *hunoz, **hukairz):
@@ -1614,7 +1630,8 @@ class MonitorWindow (MyWindow):
     """
     if me._kidding:
       return
-    T.Coroutine(me._addautopeer_hack).switch(peer)
+    T.Coroutine(me._addautopeer_hack,
+                name = '_addautopeerhack %s' % peer).switch(peer)
 
   def _addautopeer_hack(me, peer):
     """Make an automated connection to PEER in response to a user click."""