llancet has asked for the wisdom of the Perl Monks concerning the following question:
PPCODE: // the number of return value is known EXTEND(SP, things.size()); // cycle a list of things for (size_t i=0; i<things.size(); i++) { AV* curr_slot = newAV(); SV* sv_obj = newSV(NULL); sv_setref_pv(sv_obj, "My::Class", things[i].obj); SV* sv_num1 = newSViv(things[i].foo); SV* sv_num2 = newSViv(things[i].bar); SV* sv_num3 = newSViv(things[i].baz); av_push(curr_slot, sv_obj); av_push(curr_slot, sv_num1); av_push(curr_slot, sv_num2); av_push(curr_slot, sv_num3); mPUSHs((SV*) curr_slot); }
Now, I have two questions:
1. There are four SVs created on each for cycle. Should I manually unref them, or they are automatically destroyed on XS function return?
2. Does the use of mPUSHs(AV) correct?
Thanks!!!
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Should I manually unref these SVs in XS code?
by ikegami (Patriarch) on Sep 04, 2014 at 16:38 UTC |