This is a C API question.

What's the recommended way to handle an error that occurs while 
executing the free function that gets called from GC? (That is, the 
function pointed to by the 3rd argument to Data_Wrap_Struct?)

I have a free function that needs to delete one or more temporary files. 
If  an error occurs while deleting one of these files, what should I do?

I'm pretty sure that calling rb_raise is not the right thing.