...XS mortalizes any SV* that you return via its RETVAL mechanism ... and the description in perlxs seems suspicious to me to (it claims that RETVAL is mortalized via the typemap file, but I'm looking at the typemap and I see no relevant mention of 'mortal' anywhere -- nor any mention of RETVAL.)
Interestingly,
RETVAL is mortalized by
xsubpp itself (see the
generate_output cruft in the
xsubpp source) - so it is hardwired into XS... But it usually turns out to do what you want, except for the cases, when it does not.