[erlang-questions] erlang nif resource & thread safety
Wed May 18 14:13:21 CEST 2016
On Mon, May 2, 2016 at 4:24 PM Sverker Eriksson <
> A resource will be deallocated when
> * all terms created with enif_make_resource() have been garbage collected
> * AND the call to enif_alloc_resource() has been balanced by a call to
> * AND all calls to enif_keep_resource() have been balanced by an equal
> number of calls to enif_release_resource()
> On 05/02/2016 11:47 AM, Benoit Chesneau wrote:
> I had a look in the doc but I can't figure exactly how much a nif resource
> could live outside the process that created it, ie. how others processes
> can write/read to it and how to make sure the resource will be accessible
> to them.
> So I created a nif resource that have the following properties:
> - it is ref counted, each time a call is made to it, the counter is
> incremented and decremented when it return.
> A resource already has an internal ref counter, which is decremented by
> the GC and by enif_release_resource().
> Adding your own ref counter is probably either redundant or just plain
> Every call to enif_release_resource() must be balanced by a prior call
> to either enif_alloc_resource() or enif_keep_resource(). You cannot
> release a resource that is still referred to by one of more terms.
> - the process that create it will live until the vm is closed
> A resource it not tied to the process that created it,
> it is tied to the terms that refer it.
Related to that I recently came with the following question:
How to tie a nif resource to a owner process to make sure it's cleaned if
the process crash?
Looking at the source of ETS it seems to use unexposed functions from
I think I miss a C function like "nif_tie_resource(pid, somecalleback)" .
Or is there any code that already does that?
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the erlang-questions