From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: Re: [PATCH 1/2] tools/console: reset tty when xenconsole fails Date: Mon, 17 Mar 2014 16:35:28 +0000 Message-ID: <53272450.3010808@eu.citrix.com> References: <1395073457-2584-1-git-send-email-ian.jackson@eu.citrix.com> <1395073457-2584-2-git-send-email-ian.jackson@eu.citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1395073457-2584-2-git-send-email-ian.jackson@eu.citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Jackson , xen-devel@lists.xensource.com Cc: Ian Campbell , M A Young List-Id: xen-devel@lists.xenproject.org On 03/17/2014 04:24 PM, Ian Jackson wrote: > If xenconsole (the client program) fails, it calls err. This would > previously neglect to reset the user's terminal to sanity. Use atexit > to do so. > > This routinely happens in Xen 4.4 RC5 with pygrub because something > writes the value "" to the tty xenstore key when using xenconsole. > The cause of this is not yet known, but after this patch it just > results in a harmless error message. Is it the case that the cause of this is still not yet known? It seemed to be explained by the subsequent patch. :-) In any case: Acked-by: George Dunlap > > Reported-by: M A Young > Signed-off-by: Ian Jackson > CC: M A Young > CC: Ian Campbell > CC: George Dunlap > --- > tools/console/client/main.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/tools/console/client/main.c b/tools/console/client/main.c > index eb6a1a9..62159f6 100644 > --- a/tools/console/client/main.c > +++ b/tools/console/client/main.c > @@ -257,6 +257,13 @@ typedef enum { > CONSOLE_SERIAL, > } console_type; > > +static struct termios stdin_old_attr; > + > +static void restore_term_stdin(void) > +{ > + restore_term(STDIN_FILENO, &stdin_old_attr); > +} > + > int main(int argc, char **argv) > { > struct termios attr; > @@ -383,9 +390,9 @@ int main(int argc, char **argv) > } > > init_term(spty, &attr); > - init_term(STDIN_FILENO, &attr); > + init_term(STDIN_FILENO, &stdin_old_attr); > + atexit(restore_term_stdin); /* if this fails, oh dear */ > console_loop(spty, xs, path); > - restore_term(STDIN_FILENO, &attr); > > free(path); > free(dom_path);