Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch to Refcounted Stack #20858

Closed
wants to merge 70 commits into from
Closed

Switch to Refcounted Stack #20858

wants to merge 70 commits into from

Conversation

iabyn
Copy link
Contributor

@iabyn iabyn commented Feb 26, 2023

second attempt. Not for merge yet.

@jkeenan
Copy link
Contributor

jkeenan commented Feb 26, 2023

second attempt. Not for merge yet.

Thanks for announcing this. Can you remove the smoke-me/davem/rc_stack1 branch from the repository now?

@demerphq
Copy link
Collaborator

You don't need to create a new PR Dave, in fact, you should not do so. You can and should force push to the old one. Note, you shouldn't really use a smoke-me branch for your PR, keep your topic branch for your PR separate and distinct from the smoke-me version.

So for instance let's say you had followed the advice about keeping smoke-me branches distinct from PR branches and you had pushed your original PR as davem/rc_stack you might do this:

# update to latest
git fetch
# checkout topic branch
git checkout davem/rc_stack
# rebase topic branch to latest blead
git rebase origin/blead
#hack hack hack
# push the topic branch and overwrite old status, start github CI 
git push -f
# push the latest state of topic branch for smoking
git push origin HEAD:smoke-me/davem/rc_stack2
# delete the previous smoke branch
git push origin :smoke-me/davem/rc_stack

The reason I say don't use a smoke-me for your PR is I believe that the smoke-me infra doesn't deal with force pushes, but i know that the PR infra on github does. The recipe above will avoid spamming github with new PRs, but still let you push new versions for smoking.

@demerphq
Copy link
Collaborator

And actually, I wouldn't bother with smoke-me branches at all until the github Ci is green, even then these days most folks dont bother. Bit if the Ci fails then certainly so shall the smoke-me, but CI will complete in about an hour, two max. The feedback loop on smoke-me branches is much slower.

@iabyn iabyn force-pushed the smoke-me/davem/rc_stack2 branch from 8f5afba to 9ca0fcc Compare February 26, 2023 14:59
@demerphq
Copy link
Collaborator

@iabyn do you think maybe we should edit the title of this PR to something like "Switch to Refcounted Stack"? I realize that you already publicized it by this name, but really you should publicize the branch, not the PR title. Github autosets the title from the topic branch, but for perl that usually isnt a great default.

@demerphq
Copy link
Collaborator

demerphq commented Feb 27, 2023

I have been running some tests to install modules with this branch with PERL_RC_STACK enabled, and with latest blead as a comparison.

So far I see the following modules broken with PERL_RC_STACK:

  • Cpanel::JSON::XS (Cpanel-JSON-XS-4.35) multiple tests fail due to: perl5.37.10: scope.c:1524: Perl_leave_scope: Assertion `0' failed.
  • IO::Socket::SSL (IO-Socket-SSL-2.081) multiple tests SEGV
  • HTML::Tree (HTML-Tree-5.07) multiple tests fail due to: perl5.37.10: sv.c:6629: Perl_sv_clear: Assertion `SvTYPE(sv) != (svtype)SVTYPEMASK' failed.
  • Text::CSV_XS (Text-CSV_XS-1.49) Multiple segfaults
  • indirect (http://www.cpan.org/authors/id/V/VP/VPIT/indirect-0.39.tar.gz) Lots of
panic: attempt to copy freed scalar 5651dd619e80 to 5651dd5c2b18 at /home/yorton/perl5/perlbrew/perls/perl_rc_stack/lib/5.37.10/Test/More.pm line 1555, <DATA> chunk 2.
Attempt to free unreferenced scalar: SV 0x563120be0c48, Perl interpreter: 0x563120bab2a0
Attempt to free temp prematurely: SV 0x55ecc6e23870, Perl interpreter: 0x55ecc6d03a50.
perl5.37.10: sv.c:6629: Perl_sv_clear: Assertion `SvTYPE(sv) != (svtype)SVTYPEMASK' failed.

@haarg
Copy link
Contributor

haarg commented Feb 27, 2023

indirect uses a bunch of custom OPs, so failures there are expected.

@dur-randir
Copy link
Member

dur-randir commented Feb 28, 2023

I've started some preliminary testing and together with the usual suspects I've found the following interesting failures:

  • Test::Trap
  • Net::Server
  • Number::Format
  • Sub::Attribute
  • Cache::Memcached::Fast
  • Devel::Cover

@iabyn iabyn force-pushed the smoke-me/davem/rc_stack2 branch from f0cf813 to a29b2af Compare March 1, 2023 11:42
@demerphq
Copy link
Collaborator

demerphq commented Mar 1, 2023

Text::CSV_XS

this was a bug in the XS code that the branch helped bring to light. I expect that for non PP related XS code this will be a pattern.

@Tux
Copy link
Contributor

Tux commented Mar 1, 2023

20230301135107
Text-CSV_XS-1.50 has been uploaded to CPAN. This is the performance graph comparing speed of a single release over different versions of perl. It clearly shows the performance hit (up is fast, down is slow)

@demerphq
Copy link
Collaborator

demerphq commented Mar 1, 2023

@iabyn we can set it up so in this branch CI runs with the define and without so you dont need that last patch. Ill look into a patch for you. (Until then it makes sense to keep it!)

@iabyn
Copy link
Contributor Author

iabyn commented Mar 1, 2023 via email

@demerphq
Copy link
Collaborator

demerphq commented Mar 1, 2023

@iabyn I just dug into the IO::Socket::SSL errors a bit, and realized that the module is pure perl, yet it still segfaults. Obviously it depends on several XS modules, Net::SSLeay for instance, but they dont SEGV in test, and it does.

Program received signal SIGSEGV, Segmentation fault.
0x000055555580d1cc in Perl_leave_adjust_stacks (my_perl=0x555555c602a0, from_sp=0x555555d2e758, to_sp=0x555555d2e750, 
    gimme=3 '\003', pass=1) at pp_hot.c:5417
warning: Source file is more recent than executable.
5417	                if (SvTEMP(sv))
(gdb) bt
#0  0x000055555580d1cc in Perl_leave_adjust_stacks (my_perl=0x555555c602a0, from_sp=0x555555d2e758, 
    to_sp=0x555555d2e750, gimme=3 '\003', pass=1) at pp_hot.c:5417
#1  0x00005555558d6e23 in Perl_pp_leave (my_perl=0x555555c602a0) at pp_ctl.c:2430
#2  0x000055555578e229 in Perl_runops_debug (my_perl=0x555555c602a0) at dump.c:2867
#3  0x00005555557ea756 in Perl_runops_wrap (my_perl=0x555555c602a0) at run.c:112
#4  0x00005555555eb69c in Perl_call_sv (my_perl=0x555555c602a0, sv=0x555555c959f8, flags=13) at perl.c:3151
#5  0x00005555555f611b in Perl_call_list (my_perl=0x555555c602a0, oldscope=2, paramList=0x555555c95ab8) at perl.c:5262
#6  0x00005555555ca547 in S_process_special_blocks (my_perl=0x555555c602a0, floor=102, 
    fullname=0x555555ca2f88 "BEGIN", gv=0x555555c95a70, cv=0x555555c959f8) at op.c:11107
#7  0x00005555555c9ae6 in Perl_newATTRSUB_x (my_perl=0x555555c602a0, floor=102, o=0x555555ca2e40, proto=0x0, 
    attrs=0x0, block=0x555555ca2e08, o_is_gv=false) at op.c:10944
#8  0x00005555555ba553 in Perl_utilize (my_perl=0x555555c602a0, aver=1, floor=102, version=0x0, idop=0x555555ca2498, 
    arg=0x0) at op.c:7843
#9  0x0000555555682230 in Perl_yyparse (my_perl=0x555555c602a0, gramtype=258) at perly.y:461
#10 0x00005555555e8a5c in S_parse_body (my_perl=0x555555c602a0, env=0x0, xsinit=0x55555559b3ec <xs_init>)
    at perl.c:2611
#11 0x00005555555e67f4 in perl_parse (my_perl=0x555555c602a0, xsinit=0x55555559b3ec <xs_init>, argc=3, 
    argv=0x7fffffffd928, env=0x0) at perl.c:1917
#12 0x000055555559b2e8 in main (argc=3, argv=0x7fffffffd928, env=0x7fffffffd948) at perlmain.c:106

(you can ignore the warning about source code being newer than executable. I build this from your branch a while back and have since changed branch a few times.)

@Tux
Copy link
Contributor

Tux commented Mar 1, 2023

Text-CSV_XS-1.50-perl.txt
Here are the raw numbers that were used for the graph

@demerphq
Copy link
Collaborator

demerphq commented Mar 1, 2023

Cpanel::JSON::XS uses SAVESTACK_POS(), from your comment in scope.c:

#ifdef PERL_RC_STACK
            /* DAPM Jan 2023. I don't think this save type is used any
             * more, but if some XS code uses it, fail it for now, as
             * it's not clear to me what perl should be doing to stack ref
             * counts when arbitrarily resetting the stack pointer.
             */
            assert(0);
#endif

I decided to see what would happen if I simply removed it, and all tests passed.

All of the uses have the same form:

$ grep SAVESTACK_POS XS.xs 
          ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP);
              ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP);
          ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP);
    ENTER; SAVETMPS; SAVESTACK_POS (); PUSHMARK (SP);

I have never seen that before, and I dont know what we should do about it. Cpanel::JSON::XS is a fork of code (JSON::XS) by someone who has a history of not reacting well to internals changes, so i think we can assume there will be some gnashing of teeth over this. :-( Any idea what kind of issues we should expect by removing this? @rurban maintains the Cpanel::JSON::XS fork, maybe he has some insight here.

@Tux
Copy link
Contributor

Tux commented Mar 1, 2023

If it will effectively be a no-op, it will be easy to put in ppport.h and all XS using it will be safe instantly :)

@haarg
Copy link
Contributor

haarg commented Mar 1, 2023

JSON::XS added calls to SAVESTACK_POS in version 3.02 and removed them in version 4.0.

Those calls were brought into Cpanel::JSON::XS in version 3.0212 by merging in changes from JSON::XS. But apparently the removals have never been brought over.

@demerphq
Copy link
Collaborator

demerphq commented Mar 1, 2023

Regarding HTML::Tree. The error is inconsistent, sometimes it does not occur. But when it occurs it always occurs in the same test file and test, construct_tree.t just after test 44. It also seems to require that HTML::FormatText LWP::UserAgent are installed, although i am less certain of that.

gdb --args perl -Mblib t/construct_tree.t
....
ok 44 - found Gisle
perl: sv.c:6629: Perl_sv_clear: Assertion `SvTYPE(sv) != (svtype)SVTYPEMASK' failed.

Program received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
50	../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x00007ffff7c27859 in __GI_abort () at abort.c:79
#2  0x00007ffff7c27729 in __assert_fail_base (fmt=0x7ffff7dbd588 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", 
    assertion=0x555555bcd850 "SvTYPE(sv) != (svtype)SVTYPEMASK", file=0x555555bc1b10 "sv.c", line=6629, 
    function=<optimized out>) at assert.c:92
#3  0x00007ffff7c38fd6 in __GI___assert_fail (assertion=0x555555bcd850 "SvTYPE(sv) != (svtype)SVTYPEMASK", 
    file=0x555555bc1b10 "sv.c", line=6629, function=0x555555bd51f8 <__PRETTY_FUNCTION__.25418> "Perl_sv_clear")
    at assert.c:101
#4  0x000055555584d56d in Perl_sv_clear (my_perl=0x555555c602a0, orig_sv=0x555556cb6f78) at sv.c:6629
#5  0x0000555555850af8 in Perl_sv_free2 (my_perl=0x555555c602a0, sv=0x555556cb6f78, rc=1) at sv.c:7233
#6  0x00005555558c7a07 in Perl_SvREFCNT_dec (my_perl=0x555555c602a0, sv=0x555556cb6f78) at sv_inline.h:689
#7  0x00005555558d0691 in Perl_pp_mapwhile (my_perl=0x555555c602a0) at pp_ctl.c:1271
#8  0x000055555578e229 in Perl_runops_debug (my_perl=0x555555c602a0) at dump.c:2867
#9  0x00005555557ea756 in Perl_runops_wrap (my_perl=0x555555c602a0) at run.c:112
#10 0x00005555555e9bbf in S_run_body (my_perl=0x555555c602a0, oldscope=1) at perl.c:2799
#11 0x00005555555e909e in perl_run (my_perl=0x555555c602a0) at perl.c:2719
#12 0x000055555559b32d in main (argc=3, argv=0x7fffffffd928, env=0x7fffffffd948) at perlmain.c:127

pp_ctl.c: 1271 is the last line of this code:

        if (SvPADTMP(src)) {
            SV *newsrc = sv_mortalcopy(src);
            PL_stack_base[PL_markstack_ptr[-1]] = newsrc;
#ifdef PERL_RC_STACK
            SvREFCNT_inc_simple_void_NN(newsrc);
            SvREFCNT_dec(src);
#endif
            src = newsrc;
        }
        if (SvPADTMP(src)) {
            src = sv_mortalcopy(src);
        }
        SvTEMP_off(src);
        DEFSV_set(src);

DEFSV_set is defined as

# define DEFSV_set(sv) \
    (SvREFCNT_dec(GvSV(PL_defgv)), GvSV(PL_defgv) = SvREFCNT_inc(sv))

@iabyn
Copy link
Contributor Author

iabyn commented Mar 1, 2023

As regards SAVESTACK_POS() and Cpanel::JSON::XS(), I think all their uses in that distribution are effective NOOPs. They are all of the form: remember the current stack position, then do call_sv(), process any return values, then LEAVE() (which then restores the old stack pos). But in every case, before the LEAVE the code manually resets the stack anyway, e.g. the 'SP -= items;' in encode_rv(). And if the code dies, perl does stack unwinding anyway. So NOOP.

One possibility is to just remove SAVESTACK_POS() from that distribution. According to grep.metacpan.org, the only other distribution on CPAN which uses that macro is B-Hooks-XSUB-CallAsOp-0.02, which hasn't had a release since 2009, and doesn't seem to be used anywhere.

The other possibility is to fix perl. When I disabled SAVESTACK_POS(), I didn't yet have any easy way to fix it. Later I added
rpp_obliterate_stack_to() to the API, which is kind of exactly what leave_scope() needs to implement SAVESTACK_POS(). But I suspect that the concept of SAVESTACK_POS() is kind of broken, and making perl silently and correctly help an XS module to hang itself is just prolonging the agony.

So I'm kind of inclined to say keep SAVESTACK_POS() doing assert(0) and remove it from any disgtributions which still use it.

@rurban
Copy link
Contributor

rurban commented Mar 1, 2023

Thanks. I'll happily remove it also. Old cruft

@iabyn
Copy link
Contributor Author

iabyn commented Mar 1, 2023 via email

rurban added a commit to rurban/Cpanel-JSON-XS that referenced this pull request Mar 2, 2023
merged from JSON-XS-3.02, removed there with 4.0
requested to remove with Perl/perl5#20858
@iabyn iabyn force-pushed the smoke-me/davem/rc_stack2 branch from b7ef172 to dec99a6 Compare March 12, 2023 15:34
@iabyn
Copy link
Contributor Author

iabyn commented Mar 14, 2023 via email

iabyn added 20 commits August 12, 2023 22:25
This function indicates whether an SV on the stack is kept alive only by
a single ref from the temps stack - which is often the case with stuff
pushed onto the stack by PP functions. Often this means that the SV can
be passed through rather then copied in places like returning from a
subroutine.

With a ref-counted stack, it's possible for a *non* SvTEMP SV to also be
stealable, if it has a refcount of 1, since that SV is being kept alive
purely by its (now refcounted) link from the stack.

So this commit adds that condition too (and also simplifies the
condition for efficiency).

In summary: originally perl (and then this function) did:

    if (SvTEMP(sv) && SvREFCNT(sv) == 1) { ... steal it ... }

Now this function's condition is the equivalent of

    #ifdef PERL_RC_STACK
        (    (SvREFCNT(sv) == 1)
        || (SvTEMP(sv) && SvREFCNT(sv) == 2))
    #else
        (SvTEMP(sv) && SvREFCNT(sv) == 1)
    #endif
When displaying the stack with perl -Ds or -Dsv, put a vertical bar (|)
at the boundary between the reference-counted part of the stack and the
non-reference-counted part, if any.

In addition with -Dsv, for each stack show its status;

    (real)         all items on the stack are reference-counted
    (partial real) items below si->si_stack_nonrc_base are RCed
    blank          no items are RCed

This commit switches to invoking S_deb_stack_n() directly, rather than
via the deb_stack_n() macro, as some compilers can't cope with the
'ifdef' amongst the calling args.
This macro was just a temporary crutch that disabled actually adjusting
the reference count of things being pushed and popped off the stack,
even on PERL_RC_STACK builds. It allowed the core to be converted to
support a reference-counted stack as a bunch of incremental changes.

This commit turns it off, enabling the stack to become actually
reference-counted on PERL_RC_STACK builds.

In a few commits' time, this macro will be completely eliminated from
the source code.
On perls built with both -DPERL_RC_STACK and -DDEBUG_LEAKING_SCALARS,
add asserts to the various old-style PUSHs() etc macros and new-style
rpp_push_1() etc functions that they're operating on the right sort of
stack. In particular:

PUSHs() and POPs() should only be used on stacks where rpp_stack_is_rc()
is false, since they don't modify the reference count of the SVs they
are pushing or popping.

Conversely, rpp_push_1(), rpp_popfree_1() etc should only be used on
stacks where rpp_stack_is_rc() is true, since they modify the reference
counts of the SVs they push and pop.

On perls not compiled with PERL_RC_STACK, the rpp_ functions don't
modify the reference counts, but on such builds the rpp_stack_is_rc()
assertions in the rpp_ functions are disabled, so it all works out
still.
on PERL_RC_STACK builds,
1) assert that the stack is reference-counted (rpp_stack_is_rc()).
2) assert the any split point (si_stack_nonrc_base) isn't above the
    top of the stack.
and put it in a static function, S_pp_xs_wrap_return().
After bumping up the reference counts of the returned values,
reset si_stack_nonrc_base earlier, so that if perl dies while
decrementing the original args, all reference counts will be properly
accounted for.

Also in xs_wrap(), only bother doing

    PL_markstack_ptr[0]  += nargs;

in the branch where nargs > 0.
This new macro allows an old-style non-reference-counted PP-style
function to be used on a PERL_RC_STACK builds. It's intended for
non-core PP functions which are typically in an XS file and are used to
replace the PP function of an existing op, or to be attached to a custom
op.

It's virtually identical to the PP_wrapped() macro, except that it
uses the name as-is rather than prepending Perl_ to the name
In this test function, push a couple of stackinfos, one with a
ref-counted stack, and one without.
After cloning, pop the cloned stackinfos and assert that the cloned
argument stacks are also appropriately RC or non-RC.

This should probably have been done properly as some new tests rather
than a couple of asserts, but that would have involved a lot more
effort.
This macro was disabled a few commits ago. Now remove all use of it
from the core.

It was just a temporary crutch that disabled actually adjusting the
reference count of things being pushed and popped off the stack, even on
PERL_RC_STACK builds. It allowed the core to be converted to support a
reference-counted stack as a bunch of incremental changes.
Explain what all the new rpp_foo() functions are for.
Turns out MSVC 1.42 doesn't like

        FOO(bar,
    #ifdef X
            1
    #else
            0
    #endif
        );

where FOO is a macro.
This function was doing a delayed ref count decrement of all the SVs it
had previously temporarily incremented, by mortalising each one. For
efficiency it was just doing a Copy() of a block of SVs addresses from
the argument stack to the TEMPs stack.

However, the TEMPs stack can't cope with NULL pointers, while there are
sometimes NULL pointers on the argument stack - in particular, while
doing a map, any temporary holes in the stack are set to NULL on
PERL_RC_STACK builds.

The fix is simple - copy individual non-NULL addresses to the TEMPS
stack rather than doing a block copy.
Copy @_ SV pointers to @db::args earlier, before pp_caller() has the
chance to create any new SVs (e.g. for the package name). This will give
the next commit a chance to discover and skip any freed elements in @_.

This commit makes no changes to the block of code that is moved;
that's saved for the next commit.
When pp_caller() aliases the elements of @_ to @db::args, it may include
pointers to array elements which have been shifted away. So for example
in

    sub f { my $self = shift; ....; croak() }

it populates $DB::args[0] with the SV pointer one position below the
AvARRAY() of @_. This means that the argument lists in the stack
backtrace provided by croak() will include the original first arg,
which is nice, but is very fragile. There is no guarantee that that SV
hasn't been freed or reallocated in the meantime.

This commit adds a check for each SV pointer being copied to @db::args,
which NULLs it if the SV has a refcount of 0.

This means that in something like:

    package DB:
    () = caller($i);
    my @Args = @db::args;

perl will no longer panic about copying a freed SV.

Note that this commit does not address the issue of the SV having already
been reallocated. In the example above, some elements of @Args may
contain a copy of some other random variable. However, the previous
commit moved to earlier in the function, the block of code in
pp_caller() which populates @db::args, to before pp_caller() allocates
new SVs for things like the package name. Which means the RC==0 test
added by this commit has a better chance of spotting SVs which have been
freed but not yet reallocated.

In summary, @db::args is still a horrible, fragile hack, but these two
commits make it slightly less fragile in some circumstances.
When a sub's @_ gets abandoned (e.g. when 'goto &bar' "donates" the
current @_ to the new sub), a new AV is created at pad[0] for the old
sub. Perl alloc()'s the AvARRAY() buffer for the new AV, but didn't zero
it. This didn't used to be a problem, because @_ AVs are created
!AvREAL(), so the first thing perl did when someone tries to modify @_,
is to call av_reify() on it.  And it just so happens that av_reify()
zeros out all the unused slots on the array first. So code like

    $_[1] = 1;
    do_something_with($_[0])

was fine.

However, on PERL_RC_STACK builds, @_ is AvREAL() by default now, so
av_reify() doesn't get called, so AvARRAY() can sometimes contain random
wild pointers.

The fix is simple: zero AvARRAY() when creating it.

This was showing as a failure in Test::Trap
An earlier commit added some asserts to the old-style and new-style
stack push/pop functions such as PUSHs() or rpp_popfree_1().  These
assert that the stack is reference-counted or not as appropriate.

These asserts were enabled only if perl was built with all of

    DEBUGGING && PERL_RC_STACK && DEBUG_LEAKING_SCALARS.

This commit makes the asserts available under just

    DEBUGGING && PERL_RC_STACK

Initially  I was worried about the performance implications (you expect
DEBUGGING builds to be slow, but not *too* slow), but they don't seem
too bad. So by making them more likely to be enabled, they're more
likely to help people spot code that needs fixing (e.g. code still doing
POPs when the stack is reference counted and the function hasn't been
wrapped).
Add a suite of tests which check whether all the "stack not reference
counted" tickets are fixed when perl is built with PERL_RC_STACK
This function is just a neater version of:

    #ifdef PERL_RC_STACK
        Perl_xs_wrap(aTHX_ CvXSUB(cv), cv);
    #else
        (void)(*CvXSUB(cv))(aTHX_ cv);
    #endif

but shortly it will be extended to allow XS CVs to be flagged as
"RC-aware".
Allow an XS sub to be flagged with CVf_XS_RCSTACK, which indicates that
it expects a reference-counted stack - and so pp_entersub() etc should
invoke it directly rather than via xs_wrap() on PERL_RC_STACK builds.

Note that there is not yet any syntax in an XS file which supports
marking an XS sub as 'RC-aware', so this facility is very much
in the early stages and "at your own risk", requiring the CV to
manually have its CVf_XS_RCSTACK flag set.
@iabyn iabyn force-pushed the smoke-me/davem/rc_stack2 branch from 14148aa to 2899bb2 Compare August 12, 2023 21:38
Copy link
Contributor

@khwilliamson khwilliamson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have read through these commits, and they look reasonable to me. I think it unlikely that someone will have the time to scrutinize them all carefully. Therefore, at this point in the development cycle, I think that after a suitable period to give people a chance to comment, that these be merged

@iabyn
Copy link
Contributor Author

iabyn commented Aug 14, 2023 via email

@demerphq
Copy link
Collaborator

demerphq commented Aug 14, 2023 via email

@hvds
Copy link
Contributor

hvds commented Aug 15, 2023

@iabyn if you think this is stable enough, it may be worth inviting @dur-randir to throw some fuzzing at it either before or after it is merged.

@iabyn
Copy link
Contributor Author

iabyn commented Aug 16, 2023

Now merged into blead.

@iabyn iabyn closed this Aug 16, 2023
@iabyn iabyn deleted the smoke-me/davem/rc_stack2 branch August 16, 2023 16:55
JRaspass added a commit to JRaspass/perl5 that referenced this pull request Aug 17, 2023
To ensure the refcounted stack build doesn't bitrot until it's the
default.

Updates Perl#20858
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants