Re: xsubpp and Tk ==> segfault
authorIlya Zakharevich <ilya@math.ohio-state.edu>
Wed, 8 Jan 1997 08:25:47 +0000 (03:25 -0500)
committerChip Salzenberg <chip@atlantic.net>
Wed, 15 Jan 1997 19:24:00 +0000 (07:24 +1200)
commit7c5b83de28ae2ebfce6a3a7e907a300596342a30
tree5f4eea324a072d0392d1968b79d588dfc06ff179
parentac1ad7f00e63b0423f397847dd05653ab9cea16c
Re: xsubpp and Tk ==> segfault

Ilya Zakharevich writes:
>
> I recall that the reason why void code may be marked as XSRETURN(1) is
> that XS TUTORIAL recommended to mark XSUB as void if you manually put

It is not perlxstut, it is perlxs.

> in stack manipulation! I do not know why this horrible practice is
> blessed, but we need a workaround which would allow this mess, and
> would not make an XSUB

[Add: ] ... segfault if some Perl code was called in between.

As I found out, the only difference between an XSUB with a CODE:
section which is declared `void' and one which is declared "SV *" is
that the first one does not contain a line:
SV * RETVAL;
Is there any trouble if such a line is present?

If nobody will strongly object to it, I will remove an advice to
mark a CODE:-XSUBs as `void' from the POD(s).

I can also add a warning to xsubpp if a `void' XSUB sets ST(*). What
about it? (Warning will be issued only once per .xs .)

> Solution: Make the check for CODE section stricter: check for actuall
> occurence of "ST(" (with embedded spaces) before making the decision
> to XSRETURN(1).

The following patch is checked with Perl 3_17 and Tk (it checks for ST
at the LHS as an assignment):

Enjoy,

p5p-msgid: <199701080825.DAA15813@monk.mps.ohio-state.edu>
lib/ExtUtils/xsubpp