[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] libxl: drop bootloader output if xenconsole file descriptor is not available for writing
On 10/10/11 15:04, Roger Pau Monne wrote: > # HG changeset patch > # User Roger Pau Monne <roger.pau@xxxxxxxxxxxxx> > # Date 1318255452 -7200 > # Node ID 1ebcb5d27ead38d6713d865704394ca99444f93c > # Parent a5b8d5c8c98e0dd17368eea1801a8edaf1e79e69 > libxl: drop bootloader output if xenconsole file descriptor is not available > for writing. > > Drop output from bootloader if the pty buffer is full and we cannot write > more data. Prevents the bootloader from getting stuck when using ptys with > small buffers. > > Signed-off-by: Roger Pau Monne <roger.pau@xxxxxxxxxxxxx> > > diff -r a5b8d5c8c98e -r 1ebcb5d27ead tools/libxl/libxl_bootloader.c > --- a/tools/libxl/libxl_bootloader.c Mon Oct 10 11:26:22 2011 +0200 > +++ b/tools/libxl/libxl_bootloader.c Mon Oct 10 16:04:12 2011 +0200 > @@ -169,6 +169,7 @@ static char * bootloader_interact(libxl_ > > size_t nr_out = 0, size_out = 0; > char *output = NULL; > + struct timeval timeout; > > /* input from xenconsole. read on xenconsoled_fd write to bootloader_fd > */ > int xenconsoled_prod = 0, xenconsoled_cons = 0; > @@ -177,9 +178,14 @@ static char * bootloader_interact(libxl_ > int bootloader_prod = 0, bootloader_cons = 0; > char bootloader_buf[BOOTLOADER_BUF_SIZE]; > > + /* Set timeout to 1s before starting to discard data */ > + timeout.tv_sec = 1; > + timeout.tv_usec = 0; > + > while(1) { > fd_set wsel, rsel; > int nfds; > + int space; You appear to introduce an unreferenced variable here. > > if (xenconsoled_prod == xenconsoled_cons) > xenconsoled_prod = xenconsoled_cons = 0; > @@ -208,9 +214,14 @@ static char * bootloader_interact(libxl_ > nfds = bootloader_fd + 1 > nfds ? bootloader_fd + 1 : nfds; > } > > - ret = select(nfds, &rsel, &wsel, NULL, NULL); > + ret = select(nfds, &rsel, &wsel, NULL, &timeout); > if (ret < 0) > goto out_err; > + if (ret == 0) { > + /* Timeout reached, force clear buffers */ > + xenconsoled_prod = xenconsoled_cons; > + bootloader_prod = bootloader_cons; > + } > > /* Input from xenconsole, read xenconsoled_fd, write bootloader_fd */ > if (FD_ISSET(xenconsoled_fd, &rsel)) { > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxxxxxxxx > http://lists.xensource.com/xen-devel -- Andrew Cooper - Dom0 Kernel Engineer, Citrix XenServer T: +44 (0)1223 225 900, http://www.citrix.com _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |