<div dir="ltr"><div>Hi everyone,<br></div><div><br></div><div>We are working on some code that allocates large chunks of memory inside a NIF and ties them to a resource (using enif_alloc_resource + enif_make_resource). While running some tests, I noticed that we were holding onto these resources for longer than we wanted to, so we have added calls to erlang:garbage_collect/1. In a nutshell, the code looks like this:</div><div><br></div><div style="margin-left:40px">my_nif:function_allocates_large_memory(),</div><div style="margin-left:40px">erlang:garbage_collect(),</div><div style="margin-left:40px">my_nif:check_if_resource_has_been_destroyed().<br></div><div><br></div><div>In our runs, it seems that the resource has not yet been destroyed in most cases. However, if we do add a sleep after garbage collection, then the odds of it being destroyed increases as we increase the sleep interval.</div><div><br></div><div>Is this correct? Even if the resource was garbage collected, the destructor may not have been called? Or is this actually a big in our software that we should look deeper into?</div><div><br></div><div>Thank you,<br></div></div>