diff -rup xen-3.1.0-testing.hg-rc7.orig/tools/xenfb/xenfb.c xen-3.1.0-testing.hg-rc7.new/tools/xenfb/xenfb.c --- xen-3.1.0-testing.hg-rc7.orig/tools/xenfb/xenfb.c 2007-05-17 17:38:22.000000000 -0400 +++ xen-3.1.0-testing.hg-rc7.new/tools/xenfb/xenfb.c 2007-05-17 18:33:25.000000000 -0400 @@ -318,6 +318,10 @@ static int xenfb_using_old_protocol(stru for (;;) { state = xenfb_read_state(xsh, xenfb->fb.otherend); + if (state == XenbusStateUnknown) { + ret = -1; + break; + } if (state > XenbusStateInitialising) { ret = 0; /* frontend talks xenbus protocol */ break; @@ -570,7 +574,7 @@ int xenfb_attach_dom(struct xenfb *xenfb { struct xenfb_private *xenfb = (struct xenfb_private *)xenfb_pub; struct xs_handle *xsh = xenfb->xsh; - int val, serrno; + int ret, val, serrno; struct xenfb_page *fb_page; xenfb_detach_dom(xenfb); @@ -600,8 +604,9 @@ int xenfb_attach_dom(struct xenfb *xenfb if (!xs_watch(xsh, xenfb->kbd.otherend, "")) goto error; - if (xenfb_using_old_protocol(xenfb)) - return 1; + ret = xenfb_using_old_protocol(xenfb); + if (ret) + return ret; if (xenfb_wait_for_frontend_initialised(&xenfb->fb) < 0) goto error;