<br><br><div class="gmail_quote">On Sat, Feb 7, 2009 at 1:28 PM, Matthew Flatt <span dir="ltr">&lt;<a href="mailto:mflatt@cs.utah.edu">mflatt@cs.utah.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
File handles are registered with a custodian, as Shriram alluded. If a<br>
DB connection is implemented through an FFI binding to some library,<br>
then each DB connection also should be registered with the current<br>
custodian. If it&#39;s built on file descriptors, TCP connections, or other<br>
things that are already registered with the custodian, then probably<br>
nothing more is needed.<br>
</blockquote><div><br>I think in most cases custodian might indeed be enough.&nbsp; But suppose that the code needs to do some additional clean up during the shutdown phrase.&nbsp; A contrived (or maybe not so much) example: when we start a database connection, we set the lock on the database file (which is its own separate file), and when we close the database connection, we also have to ensure that we delete the lock so the state of the database is clean.<br>
<br>In such a situation, the additional clean up requires a separate procedure call that needs to be called during the shutdown phase.&nbsp; I am not sure how to do such a setup with using custodian.&nbsp; That&#39;s why I asked whether there is a hook that can clean up such objects.&nbsp;<br>
</div><div>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Meanwhile, wouldn&#39;t the closest analogue to automatic C++ init/destruct<br>
for a block be `call-with-...&#39; functions, such as<br>
`call-with-input-file&#39;? Those use `dynamic-wind&#39; to ensure that the<br>
file is explicitly closed when control leaves the `call-with-...&#39;<br>
invocation.<br>
<font color="#888888"></font></blockquote><div><br>call-with-* are for auto/local variable management, but I am thinking about longer lived objects, analogue would be C++ object managed through smart pointers such as the boost library.&nbsp; For example, there might be a module that provides a set of functions as its interface, but the module hides the fact that these functions uses a database connection (supposedly we can swap out the module so the client should not be aware that there is a database connection).&nbsp; In such situation it would be nice to have the module that hides the implementation detail to manage the destruction of the object once the module goes out of the scope. <br>
<br>Thanks,<br>yc<br><br></div></div>