[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


 


Rackspace

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