summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2008-03-31 16:59:07 +0000
committerNicholas Clark <nick@ccl4.org>2008-03-31 16:59:07 +0000
commitba880bbf8088eab97ca67ab4a9f720bd66869f94 (patch)
tree8044ca8016704d4e3b30d9bc85b514f9b445edf6 /util.c
parent9e6e929b49155a4e040be3c98aa578e5de1ec66d (diff)
downloadperl-ba880bbf8088eab97ca67ab4a9f720bd66869f94.tar.gz
Integrate:
[ 33239] in unpack, () groups in scalar context were still returning a list, resulting in garbage on the stack, which could manifest as a SEGV (Bug 50256) [ 33296] Subject: [PATCH] Unused var in perlio.c (revised) From: "Jerry D. Hedden" <jdhedden@cpan.org> Date: Tue, 12 Feb 2008 10:00:18 -0500 Message-ID: <1ff86f510802120700q689fb457ya5939bb440626157@mail.gmail.com> [ 33301] Subject: [PATCH] PERL_MAGIC_uvar_elem should be 'u' in dump.c From: "Vincent Pit" <perl@profvince.com> Date: Wed, 13 Feb 2008 11:10:11 +0100 (CET) Message-ID: <36116.147.210.17.175.1202897411.squirrel@147.210.17.175> [ 33334] Enable caching of strxfrm() results also for readonly SVs as returned e.g. by "keys %hash". This speeds up sorting of lots of hash keys significantly. See also: Subject: Slowdown of "sort keys %hash" under "use locale" From: Marcus Holland-Moritz <mhx-perl@gmx.net> Date: Fri, 15 Feb 2008 17:00:15 +0100 Message-ID: <20080215170015.72f6160d@r2d2> [ 33388] Do the memory debug header fixup earlier to avoid valgrind screaming under -Dm. Also, temporarily disable memory logging during thread memory freeing, as otherwise we try to log using memory we already freed. [ 33407] Subject: [PATCH] for -M:Foo, extended and revised From: "Robin Barker" <Robin.Barker@npl.co.uk> Date: Wed, 27 Feb 2008 19:19:54 -0000 Message-ID: <46A0F33545E63740BC7563DE59CA9C6D093A61@exchsvr2.npl.ad.local> [ 33408] Subject: Re: interrupting system() with signal depends on signal handler From: Steffen Ullrich <coyote.frank@gmx.net> Date: Tue, 26 Feb 2008 19:43:00 +0100 Message-ID: <47C45DB4.9060306@gmx.net> [ 33495] Subject: [perl #51636] segmentation fault with array ties From: blino@mandriva.com (via RT) <perlbug-followup@perl.org> Date: Wed, 12 Mar 2008 02:59:45 -0700 Message-ID: <rt-3.6.HEAD-25460-1205315984-377.51636-75-0@perl.org> [ 33595] Subject: [PATCH] do not use SVTYPEMASK to prevent cleaning of PL_fdpid and PL_strtab From: Gerard Goossen <gerard@tty.nl> Message-ID: <20080326130713.GL4409@ostwald> Date: Wed, 26 Mar 2008 14:07:13 +0100 [ 33596] Fix compiler warning about comparison of pointer types. p4raw-link: @33596 on //depot/perl: cddfcddc190fa3c9953973822c35e3baa71181f0 p4raw-link: @33595 on //depot/perl: d17ea59705db215628334e7846dd1056ff795f97 p4raw-link: @33495 on //depot/perl: b63c7c552a2e9cf2b2c5eb492358b8567fd16179 p4raw-link: @33408 on //depot/perl: 48dbb59ed9af112b035bdcc063c1471a22ec25a2 p4raw-link: @33407 on //depot/perl: 0544e6df68c5534300178fdd73628d687be1a6b2 p4raw-link: @33388 on //depot/perl: 4fd0a9b8690ace1bad89926e6d018a6f863761c3 p4raw-link: @33334 on //depot/perl: 16ec96eb5a252a78470d4a52a2fa7fe6fa01f72e p4raw-link: @33301 on //depot/perl: cae86ea86570588a52f7ce8a0a01b6eb824103df p4raw-link: @33296 on //depot/perl: babfacb9bd93a47857db18ca6a2ffb50458aefb3 p4raw-link: @33239 on //depot/perl: c6f750d1077663994219dbd69f4fb02631f69b10 p4raw-id: //depot/maint-5.10/perl@33614 p4raw-integrated: from //depot/perl@33613 'copy in' t/op/pack.t (@32072..) 'edit in' t/run/switches.t (@32956..) 'merge in' av.c (@33452..) p4raw-integrated: from //depot/perl@33595 'edit in' sv.c (@33579..) p4raw-integrated: from //depot/perl@33407 'edit in' perl.c (@33388..) p4raw-integrated: from //depot/perl@33388 'edit in' util.c (@33376..) p4raw-integrated: from //depot/perl@33301 'merge in' dump.c (@33291..) p4raw-integrated: from //depot/perl@33296 'merge in' perlio.c (@33291..) p4raw-integrated: from //depot/perl@33239 'merge in' pp_pack.c (@32821..)
Diffstat (limited to 'util.c')
-rw-r--r--util.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/util.c b/util.c
index 4e9fd28b7f..8465937962 100644
--- a/util.c
+++ b/util.c
@@ -178,11 +178,11 @@ Perl_safesysrealloc(Malloc_t where,MEM_SIZE size)
ptr = (Malloc_t)PerlMem_realloc(where,size);
PERL_ALLOC_CHECK(ptr);
- DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) rfree\n",PTR2UV(where),(long)PL_an++));
- DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) realloc %ld bytes\n",PTR2UV(ptr),(long)PL_an++,(long)size));
-
- if (ptr != NULL) {
+ /* MUST do this fixup first, before doing ANYTHING else, as anything else
+ might allocate memory/free/move memory, and until we do the fixup, it
+ may well be chasing (and writing to) free memory. */
#ifdef PERL_TRACK_MEMPOOL
+ if (ptr != NULL) {
struct perl_memory_debug_header *const header
= (struct perl_memory_debug_header *)ptr;
@@ -198,7 +198,17 @@ Perl_safesysrealloc(Malloc_t where,MEM_SIZE size)
header->prev->next = header;
ptr = (Malloc_t)((char*)ptr+sTHX);
+ }
#endif
+
+ /* In particular, must do that fixup above before logging anything via
+ *printf(), as it can reallocate memory, which can cause SEGVs. */
+
+ DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) rfree\n",PTR2UV(where),(long)PL_an++));
+ DEBUG_m(PerlIO_printf(Perl_debug_log, "0x%"UVxf": (%05ld) realloc %ld bytes\n",PTR2UV(ptr),(long)PL_an++,(long)size));
+
+
+ if (ptr != NULL) {
return ptr;
}
else if (PL_nomemok)
@@ -2945,6 +2955,7 @@ Perl_wait4pid(pTHX_ Pid_t pid, int *statusp, int flags)
#endif
if (result < 0 && errno == EINTR) {
PERL_ASYNC_CHECK();
+ errno = EINTR; /* reset in case a signal handler changed $! */
}
return result;
}