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
|