All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wei Liu <wei.liu2@citrix.com>
To: Xen-devel <xen-devel@lists.xenproject.org>
Cc: Andrew Cooper <andrew.cooper3@citrix.com>,
	Ian Jackson <Ian.Jackson@eu.citrix.com>,
	Wei Liu <wei.liu2@citrix.com>
Subject: [RFC PATCH 8/8] tools/console: remove 5s bodge in console client
Date: Mon, 1 Aug 2016 14:16:25 +0100	[thread overview]
Message-ID: <1470057385-31599-9-git-send-email-wei.liu2@citrix.com> (raw)
In-Reply-To: <1470057385-31599-1-git-send-email-wei.liu2@citrix.com>

The bug described in the comment has been fixed in libxl. Since console
client is a private binary and libxl is the only supported toolstack in
upstream, remove the bodge to simplify code.

Note that the xs watch is still needed because the console client
relies on it to tell if the tty is gone.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
---
 tools/console/client/main.c | 48 +++++++++++++++++++--------------------------
 1 file changed, 20 insertions(+), 28 deletions(-)

diff --git a/tools/console/client/main.c b/tools/console/client/main.c
index 2751eb7..275b49a 100644
--- a/tools/console/client/main.c
+++ b/tools/console/client/main.c
@@ -96,38 +96,34 @@ void cfmakeraw(struct termios *termios_p)
 }
 #endif
 
-static int get_pty_fd(struct xs_handle *xs, char *path, int seconds)
+static int get_pty_fd(struct xs_handle *xs, char *path)
 /* Check for a pty in xenstore, open it and return its fd.
  * Assumes there is already a watch set in the store for this path. */
 {
 	struct timeval tv;
 	fd_set watch_fdset;
 	int xs_fd = xs_fileno(xs), pty_fd = -1;
-	int start, now;
 	unsigned int len = 0;
 	char *pty_path, **watch_paths;
 
-	start = now = time(NULL);
-	do {
-		tv.tv_usec = 0;
-		tv.tv_sec = (start + seconds) - now;
-		FD_ZERO(&watch_fdset);
-		FD_SET(xs_fd, &watch_fdset);
-		if (select(xs_fd + 1, &watch_fdset, NULL, NULL, &tv)) {
-			/* Read the watch to drain the buffer */
-			watch_paths = xs_read_watch(xs, &len);
-			free(watch_paths);
-			/* We only watch for one thing, so no need to 
-			 * disambiguate: just read the pty path */
-			pty_path = xs_read(xs, XBT_NULL, path, &len);
-			if (pty_path != NULL && pty_path[0] != '\0') {
-				pty_fd = open(pty_path, O_RDWR | O_NOCTTY);
-				if (pty_fd == -1)
-					warn("Could not open tty `%s'", pty_path);
-			}
-			free(pty_path);
+	tv.tv_usec = 0;
+	tv.tv_sec = 0;
+	FD_ZERO(&watch_fdset);
+	FD_SET(xs_fd, &watch_fdset);
+	if (select(xs_fd + 1, &watch_fdset, NULL, NULL, &tv)) {
+		/* Read the watch to drain the buffer */
+		watch_paths = xs_read_watch(xs, &len);
+		free(watch_paths);
+		/* We only watch for one thing, so no need to
+		 * disambiguate: just read the pty path */
+		pty_path = xs_read(xs, XBT_NULL, path, &len);
+		if (pty_path != NULL && pty_path[0] != '\0') {
+			pty_fd = open(pty_path, O_RDWR | O_NOCTTY);
+			if (pty_fd == -1)
+				warn("Could not open tty `%s'", pty_path);
 		}
-	} while (pty_fd == -1 && (now = time(NULL)) < start + seconds);
+		free(pty_path);
+	}
 
 #ifdef __sun__
 	if (pty_fd != -1) {
@@ -201,7 +197,7 @@ static int console_loop(int fd, struct xs_handle *xs, char *pty_path,
 		}
 
 		if (FD_ISSET(xs_fileno(xs), &fds)) {
-			int newfd = get_pty_fd(xs, pty_path, 0);
+			int newfd = get_pty_fd(xs, pty_path);
 			if (fd != -1)
 				close(fd);
                         if (newfd == -1) 
@@ -454,11 +450,7 @@ int main(int argc, char **argv)
 		err(errno, "Can't set watch for console pty");
 	xsfd = xs_fileno(xs);
 
-	/* Wait a little bit for tty to appear.  There is a race
-	   condition that occurs after xend creates a domain.  This code
-	   might be running before consoled has noticed the new domain
-	   and setup a pty for it. */ 
-        spty = get_pty_fd(xs, path, 5);
+        spty = get_pty_fd(xs, path);
 	if (spty == -1) {
 		err(errno, "Could not read tty from store");
 	}
-- 
2.1.4


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

  parent reply	other threads:[~2016-08-01 13:17 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-29 12:07 [XTF PATCH] xtf-runner: fix two synchronisation issues Wei Liu
2016-07-29 12:43 ` Andrew Cooper
2016-07-29 12:58   ` Wei Liu
2016-07-29 13:06     ` Andrew Cooper
2016-07-29 13:12       ` Wei Liu
2016-07-29 13:23         ` Andrew Cooper
2016-07-29 13:26           ` Wei Liu
2016-07-29 14:31     ` Ian Jackson
2016-07-29 14:55       ` Wei Liu
2016-07-29 16:18         ` Ian Jackson
2016-07-29 16:35           ` Andrew Cooper
2016-07-29 16:41           ` Wei Liu
2016-07-29 15:05       ` Andrew Cooper
2016-08-01 13:16       ` [RFC PATCH 0/8] Fix console " Wei Liu
2016-08-01 13:16         ` [RFC PATCH 1/8] tools/console: fix help string in client Wei Liu
2016-08-05 15:40           ` Ian Jackson
2016-08-01 13:16         ` [RFC PATCH 2/8] tools/console: introduce --start-notify-fd option for console client Wei Liu
2016-08-05 15:43           ` Ian Jackson
2016-08-01 13:16         ` [RFC PATCH 3/8] libxl: factor out libxl__console_tty_path Wei Liu
2016-08-05 15:44           ` Ian Jackson
2016-08-01 13:16         ` [RFC PATCH 4/8] libxl: wait up to 5s in libxl_console_exec for xenconsoled Wei Liu
2016-08-05 15:48           ` Ian Jackson
2016-08-01 13:16         ` [RFC PATCH 5/8] libxl: libxl_{primary_, }console_exec now take notify_fd argument Wei Liu
2016-08-05 15:49           ` Ian Jackson
2016-08-05 15:50             ` Ian Jackson
2016-08-01 13:16         ` [RFC PATCH 6/8] docs: document xenconsole startup protocol Wei Liu
2016-08-05 15:52           ` Ian Jackson
2016-08-01 13:16         ` [RFC PATCH 7/8] xl: use " Wei Liu
2016-08-05 15:55           ` Ian Jackson
2016-08-01 13:16         ` Wei Liu [this message]
2016-08-05 15:57           ` [RFC PATCH 8/8] tools/console: remove 5s bodge in console client Ian Jackson
2016-08-05 16:16             ` Wei Liu
2016-08-05 16:18               ` Ian Jackson
2016-08-05 16:28                 ` Wei Liu
2016-08-05 16:32                   ` Ian Jackson
2016-08-05 16:36                     ` Wei Liu
2016-08-05 17:23                       ` Wei Liu
2016-08-08 10:07                         ` Ian Jackson
2016-08-01 14:04       ` [XTF PATCH] xtf-runner: use xl create -Fc directly Wei Liu
2016-07-29 13:27 ` [XTF PATCH] xtf-runner: fix two synchronisation issues Andrew Cooper
2016-07-29 14:21 ` Ian Jackson
2016-07-29 14:25   ` Wei Liu
2016-07-29 14:35     ` Ian Jackson
2016-07-29 14:46       ` Wei Liu
2016-07-29 14:26   ` Andrew Cooper

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1470057385-31599-9-git-send-email-wei.liu2@citrix.com \
    --to=wei.liu2@citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.