<div dir="ltr"><div>Perhaps you could store the resource in an ETS table, which would map names (arbitrary terms, atoms, ...) to the resource itself? It would require the extra dependency of having some process own the table, and one would have to be careful with leaks, but it should work.<br><br></div><div>I think storing it in a C-land associative array could be done by always keeping at least one alive reference to it (e.g. by not calling 'enif_release_resource' while it the object lives), but avoiding resource leaks would be trickier at that point. There's a new 'enif_monitor_process' call available as of OTP 20, though; maybe one could simply make the objects owned by processes, monitor each of these processes and release the objects upon process death.<br></div><div><br></div>I myself usually just wrap the 'enif_make_resource' result in some meaningful tagged tuple and return it so that it's  debug-friendlier.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On 22 August 2017 at 20:38, Benoit Chesneau <span dir="ltr"><<a href="mailto:bchesneau@gmail.com" target="_blank">bchesneau@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I like the idea of not passing a nif resource like ets does (ie passing a ref or a name). A idea on how this could be done in an efficient manner?<br>
<br>
I actually think to use an rw lock and a simple map in the private resource for it. But unsure what I should return on creation. Do we have to return the resource erlang term to keep it associated to the process? or simply creating it in the process will be enough?<br>
<br>
BenoƮt<br>
______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr">Guilherme<br></div></div></div></div></div></div>
</div>