[erlang-questions] enif_keep_resource, enif_release_resource and thread safety
Mon Aug 8 17:48:37 CEST 2016
Tip: Run on debug VM that adds a lot of runtime assertion
for earlier bug detection and nicer core dump to inspect.
For this case it will add an extra ref counter to every resource
to detect unbalanced calls to enif_release_resource()
that may otherwise go unnoticed and instead cause the GC to crash later.
$> (cd $ERL_TOP/erts/emulator && make TYPE=debug smp)
$> $ERL_TOP/bin/cerl -debug
On 08/08/2016 03:13 PM, Vincent Siliakus wrote:
> Thanks for the confirmation! In that case I think the issue I encountered
> was that a resource was released before a keep call and thereby
> unexpectedly deleted, but I'll investigate to be sure what was happening.
> On Sat, Aug 6, 2016 at 4:16 AM, Daniel Goertzen <>
>> Those functions have their own synchronization so no need to add your own.
>> The usage case you describe sound fine.
>> On Thu, Aug 4, 2016, 03:41 Vincent Siliakus <> wrote:
>>> Does anyone know if synchronization is needed when one calls
>>> enif_keep_resource in nif functions and enif_release_resource in a nif
>>> background thread? Or in other words: is the ref counting that is used
>>> under the hood thread safe?
>>> I ask this because during some refactoring of code in the LMDB driver I'm
>>> developing at https://github.com/zambal/elmdb I stumbled upon a problem
>>> that might have been caused by unsynchronized calls to these functions.
>>> However, when I searched github for other code that uses resources , I
>>> couldn't find examples that use synchronization, but that might be because
>>> it's simply not needed in those libraries, so I'm still not sure.
>>> erlang-questions mailing list
> erlang-questions mailing list
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the erlang-questions