[erlang-questions] FFI: handling refcounted binaries

Martin Bjorklund mbj@REDACTED
Fri Sep 14 15:48:50 CEST 2007


Alceste Scalas <alceste@REDACTED> wrote:
> =========================================
> Handling refcounted binaries with the FFI
> =========================================
> 
> Let's suppose that the 'binary' FFI type is added.
> 
> If you just want to *return* a binary (filled with data) from the C
> side, it is easy.  You could just create an ErlDrvBinary in the usual
> way, (erl_driver.h, driver_alloc_binary(), driver_binary_inc_refc()
> etc.).  The FFI would turn it into a "normal" Erlang binary [1].
> 
> If you want to *receive* a handle to an Erlang binary in the form of an
> ErlDrvBinary, and increment/decrement its refcount in order to keep it
> for later use, then:
> 
>   a. if the Erlang binary is still refcounted, it is
>      straightforward [2];
> 
>   b. however, a binary created from Erlang code may *not* be
>      refcounted [3].  In this case, the FFI could force the
>      creation of a refcounted binary, copy the contents
>      of the original one, and pass an ErlDrvBinary to the C
>      side [2].  There, the standard ErlDrvBinary API could be
>      used.

I like this proposal where you always get a ErlDrvBinary.  It's
cleaner than the current driver iovec i/f.



/martin



More information about the erlang-questions mailing list