<div dir="ltr">Thank you for answering my questions.  I understand this API much better now and look forward to its release.</div><br><div class="gmail_quote"><div dir="ltr">On Thu, Dec 8, 2016 at 9:17 AM Sverker Eriksson <<a href="mailto:sverker.eriksson@ericsson.com">sverker.eriksson@ericsson.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 12/07/2016 09:41 PM, Daniel Goertzen wrote:<br class="gmail_msg">
> The presence of the resource makes sense.  But why the special close/stop<br class="gmail_msg">
> methods?  Is the existing destructor insufficient in some way?<br class="gmail_msg">
><br class="gmail_msg">
<br class="gmail_msg">
The resource destructor will not be called until all references<br class="gmail_msg">
to the resource is gone (by term GC and/or enif_release_resource<br class="gmail_msg">
calls from NIF code).<br class="gmail_msg">
<br class="gmail_msg">
It must be possible to close a file descriptor (think TCP connection)<br class="gmail_msg">
associated with a resource without having to wait for the GC. If the<br class="gmail_msg">
resource have been shared among a number of processes it might<br class="gmail_msg">
take a while until all references are purged on all heaps and the<br class="gmail_msg">
destructor is finally called.<br class="gmail_msg">
<br class="gmail_msg">
Also, it is undefined behaviour (according to POSIX) to close a file<br class="gmail_msg">
descriptor<br class="gmail_msg">
that another thread is doing select/poll on. So, to safely call close on<br class="gmail_msg">
a file<br class="gmail_msg">
descriptor we first may have to wait for a polling thread to wake up. We<br class="gmail_msg">
don't want blocking waits between scheduler threads, so we need a<br class="gmail_msg">
scheduled callback when the fd is safe to close.<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Summary:<br class="gmail_msg">
We don't want to wait for the GC but we may need to wait for polling<br class="gmail_msg">
thread, hence the stop/close callback (or whatever it should be called).<br class="gmail_msg">
<br class="gmail_msg">
/Sverker<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div>