Here, the finalizer might raise an exception. It's my understanding that such an exception can be triggered from any place that allocates memory -- in the caller of the zmq bindings or in any 3rd party library used in the same application. Such unexpected exceptions could trigger even more bugs or resource leaks, and they will produce the wrong result for any code that uses `try ... with _ -> ..."