<div><div dir="auto">One more question Raimo: how about the opposite scenario: Erlang sending big binary to the driver?</div><div dir="auto"><br></div><div dir="auto">1. Is the binary simply reference-counted?</div><div dir="auto">2. What if the Erlang side change the binary after </div><div dir="auto">sending it? Should I worry about that?<br></div><div dir="auto"><br></div><div dir="auto">/Frank</div><br><div class="gmail_quote"><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div dir="auto">Thanks Raimo. I'll stick with "driver_output_binary" for now. </div></div><div><div dir="auto"><br></div><div dir="auto">/Frank</div></div><div><br><div class="gmail_quote"><div>Le ven. 21 juil. 2017 à 11:44, Raimo Niskanen <<a href="mailto:raimo%2Berlang-questions@erix.ericsson.se" target="_blank">raimo+erlang-questions@erix.ericsson.se</a>> a écrit :<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Fri, Jul 21, 2017 at 09:11:24AM +0000, Frank Muller wrote:<br>
> Hi there,<br>
><br>
> I would like to know the difference between the two calls.<br>
><br>
> My linked-in driver has to send big (~4MB in average) binaries to the<br>
> Erlang owning process.<br>
><br>
> 1. Which call is better suited from that ?<br>
<br>
driver_output_binary(port, NULL, 0, bin, offset, len) will be received by<br>
the owning process as {Port,{data,Bin}}.  A containing integer list can be<br>
added using hbuf != NULL.<br>
<br>
erl_drv_output_term(port, term, n) will be received by the owning process<br>
simply as Term.  This involves parsing the term in ErlDrvTermData[] format<br>
to be able to produce any term.<br>
<br>
> 2. Does every binary gets copied or just reference counted?<br>
<br>
Binaries from a driver gets reference counted with either of these APIs.<br>
<br>
> 3. Any better alternative to use?<br>
<br>
I think these are fairly equivalent except that one produces a term on a<br>
predefined format.<br>
<br>
> 4. Anything else I should be aware of?<br>
<br>
If your driver needs the binary after sending it to Erlang it will have to<br>
increment the reference count itself, and free it later after decrementing<br>
the reference count.<br>
<br>
The driver can not change the data in the binary after sending it to<br>
Erlang.  That has very undefined consequences.<br>
<br>
><br>
> Many thanks...<br>
> /Frank<br>
<br>
<br>
--<br>
<br>
/ Raimo Niskanen, Erlang/OTP, Ericsson AB<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div></div></blockquote></div></div>