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

Re: [Xen-devel] [PATCH 18/28] libxl: ocaml: add xen_console_read



[...]
> >> +value stub_xl_xen_console_read(value ctx) {
> >> +  CAMLparam1(ctx);
> >> +  CAMLlocal3(list, cons, ml_line);
> >> +  int i = 0, ret;
> >> +  char *console[32768], *line;
> >> +  libxl_xen_console_reader *cr;
> >> +
> >> +  cr = libxl_xen_console_read_start(CTX, 0);
> >> +  if (cr)
> >> +          for (i = 0; libxl_xen_console_read_line(CTX, cr, &line) > 0;
> i++)
> >  > +                        console[i] = strdup(line);
> >
> > Is it obvious why i is always < 32768? Or is 32768 "too big to fail"?
> > (Sorry, couldn't resist)
> 
> This is 32K entries of 4 or 8 bytes (for 32/64bit system), meaning 128K or
> 256K of data on the stack.
> 
> I am surprised that this didn't segfault instantly, but this does seem an
> unreasonably large amount of data, especially for some library bindings.

I basically copied the value from the libxc bindings without thinking too much 
about it (although a static variable is used there)...:

#define RING_SIZE 32768
static char ring[RING_SIZE];

CAMLprim value stub_xc_readconsolering(value xch) 
{
        unsigned int size = RING_SIZE - 1; 
        char *ring_ptr = ring;
        int retval;

        CAMLparam1(xch);

        caml_enter_blocking_section();
        retval = xc_readconsolering(_H(xch), ring_ptr, &size, 0, 0, NULL);      
                                                   
        caml_leave_blocking_section();

        if (retval)
        failwith_xc(_H(xch));

        ring[size] = '\0';
        CAMLreturn(caml_copy_string(ring));
}

> If you want to end up with a list of lines, I would suggest using my patch
> series to grab the entire console ring at once, counting the number of '\n's
> present and working with that.

I am happy enough to just get the entire ring, which is what the old xc binding 
did. Is there a libxl function that does this, or is this something new in your 
patch?

Cheers,
Rob

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


 


Rackspace

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