WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] Remove the bizarre arrangement whereby EventChannel inhe

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Remove the bizarre arrangement whereby EventChannel inherits from dict. Move
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 30 Sep 2005 10:46:11 +0000
Delivery-date: Fri, 30 Sep 2005 10:43:44 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User emellor@ewan
# Node ID 345e517bab57e122111378783540645e1b0a5dfb
# Parent  41b1f86628a043fe273fbe62203fc679a5014bdc
Remove the bizarre arrangement whereby EventChannel inherits from dict.  Move
the channel-creation logic into eventChannel, making the EventChannel class
simpler.  Remove the closeEventChannel method -- it was simply doing a check
for None, and that isn't enough value to justify the extra method when there
is an EventChannel.close method there too.

Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>

diff -r 41b1f86628a0 -r 345e517bab57 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Fri Sep 30 09:50:19 2005
+++ b/tools/python/xen/xend/XendDomainInfo.py   Fri Sep 30 10:40:59 2005
@@ -32,7 +32,7 @@
 import xen.lowlevel.xc
 from xen.util.blkif import blkdev_uname_to_file
 
-from xen.xend.server.channel import EventChannel
+from xen.xend.server import channel
 
 from xen.xend import image
 from xen.xend import scheduler
@@ -1032,7 +1032,7 @@
             except:
                 # if anything goes wrong, assume the port was not yet set
                 pass
-        ret = EventChannel.interdomain(0, self.domid, port1=port, port2=0)
+        ret = channel.eventChannel(0, self.domid, port1=port, port2=0)
         self.storeDom(path, ret.port1)
         return ret
         
diff -r 41b1f86628a0 -r 345e517bab57 tools/python/xen/xend/image.py
--- a/tools/python/xen/xend/image.py    Fri Sep 30 09:50:19 2005
+++ b/tools/python/xen/xend/image.py    Fri Sep 30 10:40:59 2005
@@ -358,7 +358,8 @@
         return vncconnect
 
     def destroy(self):
-        channel.eventChannelClose(self.device_channel)
+        if self.device_channel:
+            self.device_channel.close()
         import signal
         if not self.pid:
             return
diff -r 41b1f86628a0 -r 345e517bab57 tools/python/xen/xend/server/channel.py
--- a/tools/python/xen/xend/server/channel.py   Fri Sep 30 09:50:19 2005
+++ b/tools/python/xen/xend/server/channel.py   Fri Sep 30 10:40:59 2005
@@ -13,58 +13,41 @@
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 #============================================================================
 # Copyright (C) 2004, 2005 Mike Wray <mike.wray@xxxxxx>
+# Copyright (C) 2005 XenSource Ltd
 #============================================================================
 
-import threading
-import select
-
-import xen.lowlevel.xc; xc = xen.lowlevel.xc.new()
+import xen.lowlevel.xc
 
 from xen.xend.XendLogging import log
 
-DEBUG = 0
 
-RESPONSE_TIMEOUT = 20.0
+xc = xen.lowlevel.xc.new()
 
-class EventChannel(dict):
+
+class EventChannel:
     """An event channel between domains.
     """
 
-    def interdomain(cls, dom1, dom2, port1=0, port2=0):
-        """Create an event channel between domains.
-        
-        @return EventChannel (None on error)
-        """
-        v = xc.evtchn_bind_interdomain(dom1=dom1, dom2=dom2,
-                                       port1=port1, port2=port2)
-        if v:
-            v = cls(dom1, dom2, v)
-        return v
-
-    interdomain = classmethod(interdomain)
-
-    def __init__(self, dom1, dom2, d):
-        d['dom1'] = dom1
-        d['dom2'] = dom2
-        self.update(d)
+    def __init__(self, dom1, dom2, port1, port2):
         self.dom1 = dom1
         self.dom2 = dom2
-        self.port1 = d.get('port1')
-        self.port2 = d.get('port2')
+        self.port1 = port1
+        self.port2 = port2
+
 
     def close(self):
-        """Close the event channel.
+        """Close the event channel.  Nothrow guarantee.
         """
         def evtchn_close(dom, port):
             try:
                 xc.evtchn_close(dom=dom, port=port)
-            except Exception, ex:
-                pass
+            except Exception:
+                log.exception("Exception closing event channel %d, %d.", dom,
+                              port)
             
-        if DEBUG:
-            print 'EventChannel>close>', self
         evtchn_close(self.dom1, self.port1)
         evtchn_close(self.dom2, self.port2)
+
 
     def sxpr(self):
         return ['event-channel',
@@ -74,19 +57,20 @@
                 ['port2', self.port2 ]
                 ]
 
+
     def __repr__(self):
         return ("<EventChannel dom1:%d:%d dom2:%d:%d>"
                 % (self.dom1, self.port1, self.dom2, self.port2))
 
-def eventChannel(dom1, dom2, port1=0, port2=0):
+
+def eventChannel(dom1, dom2, port1 = 0, port2 = 0):
     """Create an event channel between domains.
         
     @return EventChannel (None on error)
     """
-    return EventChannel.interdomain(dom1, dom2, port1=port1, port2=port2)
-
-def eventChannelClose(evtchn):
-    """Close an event channel.
-    """
-    if not evtchn: return
-    evtchn.close()
+    v = xc.evtchn_bind_interdomain(dom1=dom1, dom2=dom2,
+                                   port1=port1, port2=port2)
+    if v and v.get('port1'):
+        return EventChannel(dom1, dom2, v['port1'], v['port2'])
+    else:
+        return None

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Remove the bizarre arrangement whereby EventChannel inherits from dict. Move, Xen patchbot -unstable <=