MaxPerl, I haven't managed to get my head around the exact requirements of the XS code, so I can't comment much more.
I noticed in your original post that you had a DESTROY function, and I just wanted to add that I couldn't see any evidence that it will be called
automagically.
You may find that you have to explicitly call DESTROY (or Safefree) in your code, in order to avoid memory leaks.
Cheers,
Rob