| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
When calling the destructors for IO objects embedded in arena GVs,
process PL_defoutgv and PL_stderrgv last. Yes, the test suite
expects STDOUT to still work at this point. Indeed, one test in ref.t
calls print from STDOUT's destructor (which is why pp_print needed a
slight tweak to handle a null GV properly).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
split do_clean_named_objs() into two functions; the first skips the IO
slot, and the second, do_clean_named_io_objs(), only processes the IO slot.
This means that the destructors for IO objects are run later than for
other named objects, so the latter will still have access to all their IO.
This is a fix for 57ef47cc7bcd1b57927d5010f363ccaa10f1d990,
which changed do_clean_named_objs() to zap the slots of a GV rather
than just decrementing the GV's ref count. This change ensures
referential integrity, but means that GVs with a reference > 1 will still
have their slots zapped. In particular, it means that PL_defoutgv no
longer gets delayed zapping. However, this has always been a problem
for any other file handles; depending on the order of GV zapping, a file
handle could be freed before a destructor gets called that might use it.
So this is a general fix.
|
|
|
|
|
| |
Reset cx in pp_sort before POPSUB, as the pointer may no
longer be valid.
|
|
|
|
|
|
|
|
| |
This test was producing spurious output to stderr when not under
git control (e.g. a release tarball):
fatal: Not a git repository (or any parent up to mount parent )
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
|
|
|
|
|
| |
This is just a version bump to make the versions in blead and CPAN
match.
|
| |
|
| |
|
|
|
|
|
|
| |
Commit 31c91b4357905486e81f901ad079da5735bdb7ba added a block of code
to free PL_psig_pend in a signal-safe way, but omitted to remove the
original unsafe freeing code above it. Removed with this commit.
|
|
|
|
| |
Well yes, it does, kinda; but it's harmless. Add a comment to that effect.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
With PERL_DESTRUCT_LEVEL >= 1, PL_defstash is explicitly freed,
but doesn't actually get freed at that point due to a reference loop
between %:: and *::. Break that loop to ensure that PL_defstash gets freed
at that point. Actually, its not as serious as it sounds, as it would get
freed a bit later anyway by sv_clean_all(), but this new way has these
benefits:
* it gets freed where you expect it to be
* it gets freed cleanly, rather than by the more brutal sv_clean_all()
(which can leave dangling pointers to freed SVs)
* since its freed while *not* under the influence of
PL_in_clean_all = TRUE, it's more likely to flag up bugs related to
double-freeing etc. Indeed, the two previous commits to this are a
result of that.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently perl does 3 major scans of the SV arenas, so the action of
perl_destroy() is a bit like this:
for (all arena SVs) {
if (its a ref to an object)
undef the ref (and thus probably free the object)
}
for (all arena SVs) {
if (it's a typeglob and at least one of its slots holds an object) {
set SVf_BREAK on the gv
SvREFCNT_dec(gv)
}
}
return if $PERL_DESTRUCT_LEVEL < 1;
PL_in_clean_all = 1
for (all arena SVs) {
set SVf_BREAK on the sv
SvREFCNT_dec(sv)
}
The second scan is problematic, in that by randomly zapping GVs, it can
leave dangling pointers to freed GVs. This is while perl-level destructors
may still be called, meaning perl users can see corrupted state.
Note also that at this point PL_in_clean_all hasn't been set, so sv_free()
may put out 'Attempt to free unreferenced scalar' warnings.
This commit fixes this by only freeing the affected slots of the GV,
rather than freeing the GV itself. Thus makes it more like the first pass,
which undefs RVs, and ensures no dangling refs.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This adds (?^...) to signify to use the default regex modifiers for the
cluster or embedded pattern-match modifier change. The major purpose of
this is to simplify regex stringification, so that "^" is output in
place of "-xism". As a result, the stringification will not change in
the future when new regex modifiers are added, so tests, etc. that rely
on a particular stringification will have to change now, but never
again.
Code that needs to work properly with both old- and new-style regexes
can use something like the following:
# Accept both old and new-style stringification
my $modifiers = (qr/foobar/ =~ /\Q(?^/) ? '^' : '-xism';
This construct is Ben Morrow's idea.
|
| |
|
|
|
|
| |
We can now set PERL_CORE again when running its tests.
|
| |
|
| |
|
|
|
|
|
|
|
| |
If perl was configured without XS/APItest as an extension, make test and make
test_harness won't even run the tests anyway. Also, XS-APItest only lives in the
core, so it's only ever going to be tested there, making conditional tests
depending on $] unnecessary.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Testers on IRC have also discovered that the upgrade to
ExtUtils-MakeMaker-6.57_05 has resulted in some Module-Install tests
failing
|
|
|
|
|
| |
Testers on IRC have discovered that the upgrade to Encode-2.40 has resulted
in some libwww-perl tests failing
|
|
|
|
|
|
|
| |
The *.SH wildcard wrongly matched *.sh files on Windows's case-insensitive
filesystem, leading to an exec bit getting set where it shouldn't have been
Thanks to rafl and vincent for spotting the problem and the cause
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Hopefully the last-but-one update
|
|
|
|
|
| |
Not strictly necessary for these modules since they don't get installed
anyway, but their XS files have been changed since 5.13.4
|
|
|
|
| |
The XS file has been changed since 5.13.4
|
|
|
|
| |
The XS file has been changed since 5.13.4
|
|
|
|
|
| |
Not finished yet, but nearly there already thanks to the efforts of rafl
over the last month :-)
|
| |
|
|
|
|
| |
Fixes some minor typos, and adds more links, mostly to rt.perl.org.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
Commit d27f2b2f9d9e8675f5b63a1453279409ca22f8b6 changed the abstract in the main
pod file. This does the same thing for the abstract in META.yml.
Also update our no_index directories for some moved dual-life modules, while
we're at it.
|
| |
|
| |
|
| |
|
|
|
|
| |
These would fail when smokes tested under unicode locales.
|
| |
|
|
|
|
|
|
|
|
|
| |
Hash::Util used "reftype($v) eq 'HASH'" without checking for
undefinendness. This patch rectifies that. Also bumps Hash::Util
version.
Original patch and detective work by Chas. Owens. Modified by Steffen
Mueller.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
It's was intended as a temporary namespace only, and we really don't want to
ship it in any release until we've figured out what it should really look like.
This reverts commit 05c0d6bbe3ec5cc9af99d105b8648ad02ed7cc95,
"add sv_reftype_len() and make sv_reftype() be a wrapper for it"
commit 792477b9c2e4c75cb03d07bd6d25dc7e1fdf448e,
"create the "mauve" temporary namespace for things like reftype"
commit 8df6b97c1de8326d50ac9c8cae4bf716393b45bb,
"mauve.t needs access to %Config, make sure it's available"
commit cfe9162d0d593cd12a979c73df82c7509b324343,
"use more efficient sv_reftype_len() interface"
and commit 47b13905e23c2a72acdde8bb4669e25e5eaefec4
"add more tests to lib/mauve.t so it tests also that mauve::reftype can return "LVALUE""
There's a `mauve' branch still containing all the code for the temporary mauve
namespace. That should be used to work on it until it's mostly ready to be
released, and only then merged to blead. Alternatively, it should be deleted if
another way to provide mauve's features in the core is found.
|