chan-read-data would spin if `read' returns early because of
nonblocking mode.

Check whether the return value is the empty string (which can only
happen on eof or nonblocking lack of data, and we checked eof just
before), and if so, simply return.  The fileevent remains set up so we
will be called again when more data arrives.

(Deployment/testing note: this change is currently live in Cambridge,
as I cowboyed it directly into ~osstest/daemons-testing.git, on
observing this misbehaviour.)

Signed-off-by: Ian Jackson <ian.jack...@eu.citrix.com>
---
 tcl/daemonlib.tcl |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/tcl/daemonlib.tcl b/tcl/daemonlib.tcl
index 55bc385..972b5e2 100644
--- a/tcl/daemonlib.tcl
+++ b/tcl/daemonlib.tcl
@@ -166,6 +166,9 @@ proc chan-read-data {chan} {
                chan-destroy $chan
                return
            }
+            if {![string length $got]} {
+               return
+           }
            append data $got
            incr len -[string length $got]
        }
-- 
1.7.10.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

Reply via email to