The implementation must be examined in detail to see exactly what happens. What it looks like to me is that the handle is stored in the 'Raw' property of the 'Opaque' class. We only free that handle is 'is_owned' is true, however it is set to 'false' by default and we don't set it to true when constructing the object.

As such, the native handle will leak forever.

Someone will have to confirm this and double check exactly what we do in the dispose/finalize codepaths to ensure we always do destroy the native handle correctly.