> Begin forwarded message:
> 
> I’m attempting a low-level interface to libeio, building my own eio_req and 
> calling eio_submit.
> 
> Both of the issues below are easily dealt with, but are perhaps surprising, 
> if attempting to
> manage/reuse an eio_req object (I have a refcounted eio_req pool for 
> allocation) without embedding.
> 
> The 2 relatively minor issues that are fundamental libeio API design choices 
> are:
> 
> 1) req->pri being remapped from 0 -> 4 (by subtracting EIO_PRI_MIN) and hence 
> changed from what was sent.
> 
> 2) freeing ptr1/ptr2 before calling (*req->destructor).
> 
> The code looks like this
> 
> static void
> eio_destroy (eio_req *req)
> {
>   if ((req)->flags & EIO_FLAG_PTR1_FREE) free (req->ptr1);
>   if ((req)->flags & EIO_FLAG_PTR2_FREE) free (req->ptr2);
> 
>   EIO_DESTROY (req);
> }
> 
> Ultimately the decision is (imho) whether an eio_req object is “stateful”, 
> and the change
> to req->pri and the magic free of ptr1/ptr2 is a “feature” of the interface, 
> or whether the
> management of an eio_req through a low level interface with an opaque 
> destructor should
> leave as much as possible as is, and leave allocation/free to the caller.
> 
> Either API design choice is consistent.
> 
> But (at least) indicate that the memory has been de-allocated already by 
> setting ptr1/ptr2 to NULL
> and perhaps by toggling the flags bits, if you choose to view eio_req 
> handling as “stateful”.
> 
> I’d suggest that the better low-level API would be to leave the eio_req 
> object inputs unchanged
> to the greatest extent possible. JMHO ...
> 
> hth
> 
> 73 de Jeff
> 
>       

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
libev mailing list
libev@lists.schmorp.de
http://lists.schmorp.de/mailman/listinfo/libev

Reply via email to