On Sat, Jun 07, 2025 at 09:51:50AM +0200, Patrice Dumas wrote: > On Fri, Jun 06, 2025 at 07:27:55PM +0100, Gavin Smith wrote: > Indeed, that's the issue, thanks for the analysis. What confused me is > that in Perl code, it does not happens that way, but I think that it is > because the Perl scalars are not the same as a SV in XS, the SV can be > shared in XS and keeps being shared when Perl code is applied, in Perl > it is not possible, the references are copied instead of being shared, > if I may say. Using newRV_*inc creates a new SV each time, making the > previous code more similar to what happens in Perl code. > > I found newSVsv, which seems to copy the SV, including the blessing and > the 'reference' to the HV, this could be an alternative to keeping the > HV in C and calling newRV and blessing each time a reference is needed. > I still need to check if there needs to be an adjustment of reference > counting. Note that I switched to keeping the SV to avoid needing to > bless each SV created by newRV_*inc.
I see, I hadn't understood the purpose of the change. At least one of these options should work for fixing the problem.