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

Re: [Xen-devel] [PATCH 27/31] libxl: provide libxl__datacopier_*



On Tue, 2012-04-10 at 20:08 +0100, Ian Jackson wrote:
> General facility for ao operations to shovel data between fds.
> 
> This will be used by the bootloader machinery.
> 
> Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
[...]
> +static void datacopier_writable(libxl__egc *egc, libxl__ev_fd *ev,
> +                                int fd, short events, short revents);
> +
> +static void datacopier_check_state(libxl__egc *egc, libxl__datacopier_state 
> *dc)
> +{
> +    STATE_AO_GC(dc);
> +    int rc;
> +
> +    if (dc->used) {
> +        if (!libxl__ev_fd_isregistered(&dc->towrite)) {
> +            rc = libxl__ev_fd_register(gc, &dc->towrite, datacopier_writable,
> +                                       dc->writefd, POLLOUT);
> +            if (rc) {
> +                LOG(ERROR, "unable to establish write event on %s"
> +                    " during copy of %s", dc->writewhat, dc->copywhat);
> +                datacopier_callback(egc, dc, -1, 0);
> +                return;
> +            }
> +        }
> +    } else if (!libxl__ev_fd_isregistered(&dc->toread)) {
> +        /* we have had eof */
> +        libxl__datacopier_kill(dc);
> +        dc->callback(egc, dc, 0, 0);

This looks like an open coded datacopier_callback().

[...]
> @@ -1455,6 +1456,45 @@ int libxl__carefd_close(libxl__carefd*);
>  int libxl__carefd_fd(const libxl__carefd*);
> 
> 
> +/*----- datacopier: copies data from one fd to another -----*/
> +
> +typedef struct libxl__datacopier_state libxl__datacopier_state;
> +typedef struct libxl__datacopier_buf libxl__datacopier_buf;
> +
> +/* onwrite==1 means failure happened when writing, logged, errno is valid
> + * onwrite==0 means failure happened when reading
> + *     errno==0 means we got eof and all data was written
> + *     errno!=0 means we had a read error, logged

ITYM errnoval in every case here rather than actual errno ?

> + * onwrite==-1 means some other internal failure, errnoval not valid, logged
> + * in all cases copier is killed before calling this callback */
> +typedef void libxl__datacopier_callback(libxl__egc *egc,
> +     libxl__datacopier_state *dc, int onwrite, int errnoval);
> +

Ian.



_______________________________________________
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®.