[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH v2 2/6] tools/console: introduce --start-notify-fd option for console client



The console client will write 0x00 to that fd before entering console
loop to indicate its readiness.

Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
---
v2: properly handle write(2) errors
---
 tools/console/client/main.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/tools/console/client/main.c b/tools/console/client/main.c
index be39700..977779f 100644
--- a/tools/console/client/main.c
+++ b/tools/console/client/main.c
@@ -77,6 +77,7 @@ static void usage(const char *program) {
               "  -h, --help       display this help and exit\n"
               "  -n, --num N      use console number N\n"
               "  --type TYPE      console type. must be 'pv' or 'serial'\n"
+              "  --start-notify-fd N file descriptor used to notify parent\n"
               , program);
 }
 
@@ -327,10 +328,12 @@ int main(int argc, char **argv)
        int ch;
        unsigned int num = 0;
        int opt_ind=0;
+       int start_notify_fd = -1;
        struct option lopt[] = {
                { "type",     1, 0, 't' },
                { "num",     1, 0, 'n' },
                { "help",    0, 0, 'h' },
+               { "start-notify-fd", 1, 0, 's' },
                { 0 },
 
        };
@@ -364,6 +367,9 @@ int main(int argc, char **argv)
                                exit(EINVAL);
                        }
                        break;
+               case 's':
+                       start_notify_fd = atoi(optarg);
+                       break;
                default:
                        fprintf(stderr, "Invalid argument\n");
                        fprintf(stderr, "Try `%s --help' for more 
information.\n", 
@@ -462,6 +468,22 @@ int main(int argc, char **argv)
                init_term(STDIN_FILENO, &stdin_old_attr);
                atexit(restore_term_stdin); /* if this fails, oh dear */
        }
+
+       if (start_notify_fd != -1) {
+               /* Write 0x00 to notify parent about client's readiness */
+               static const char msg[] = { 0x00 };
+               int r;
+
+               do {
+                       r = write(start_notify_fd, msg, 1);
+               } while ((r == -1 && errno == EINTR) || r == 0);
+
+               if (r == -1)
+                       err(errno, "Could not notify parent with fd %d",
+                           start_notify_fd);
+               close(start_notify_fd);
+       }
+
        console_loop(spty, xs, path, interactive);
 
        free(path);
-- 
2.1.4


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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.