Does your unix longjmp() call C++ destructors (some do, see http://msdn.microsoft.com/en-us/library/yz2ez4as%28v=vs.90%29.aspx?
in reply to Memory leak in XS code that handles C++ exceptions
croak is implemented with longjmp. Would you call longjmp from a catch block if this wasnt Perl? The simplest longjmp implementation will make the C++ exception dispatcher leak all of its resources.
WAG, do a goto from the catch block to the parent block (outside of try/catch), then call croak. Or try a finally block.