Front page | perl.perl5.porters |
Postings from June 2003
Re: your malloc patches
Thread Previous
|
Thread Next
From:
Ilya Zakharevich
Date:
June 18, 2003 11:23
Subject:
Re: your malloc patches
Message ID:
20030618182308.GA1657@math.berkeley.edu
On Sun, Jun 15, 2003 at 12:53:47PM +0300, Jarkko Hietaniemi wrote:
> Thanks, looking much better, but I'm afraid a bit more work is needed.
> Too many GCCisms, a strange include file, and an assertion failure.
>
> (1) The ,) macro was still there: in perl.h:
I do not understand... I think the (broken) macro MALLOC_CHECK_TAINT2
appears in the expansion of PERL_SYS_INIT(); but PERL_SYS_INIT() is
long as obsoleted by PERL_SYS_INIT3(); how comes that this defect
became visible?
Anyway, it should be fixed by this patch.
> (2) Solaris Workshop cc doesn't like the malloc code:
>
> "malloc.c", line 1209: a cast does not yield an lvalue
Should be fixed too.
Thanks,
Ilya
--- ./perl.h~ Wed Jun 18 18:54:31 2003
+++ ./perl.h Wed Jun 18 19:51:49 2003
@@ -535,7 +535,7 @@ extern int Perl_doing_taint(int argc, ch
#define TOO_LATE_FOR_(ch,s) Perl_croak(aTHX_ "Too late for \"-%c\" option%s", (char)(ch), s)
#define TOO_LATE_FOR(ch) TOO_LATE_FOR_(ch, "")
#define MALLOC_TOO_LATE_FOR(ch) TOO_LATE_FOR_(ch, " with $ENV{PERL_MALLOC_OPT}")
-#define MALLOC_CHECK_TAINT2(argc,argv) MALLOC_CHECK_TAINT(argc,argv,)
+#define MALLOC_CHECK_TAINT2(argc,argv) MALLOC_CHECK_TAINT(argc,argv,NULL)
#if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr)
#define strchr index
--- ./malloc_ctl.h~ Wed Jun 18 18:54:30 2003
+++ ./malloc_ctl.h Wed Jun 18 19:45:30 2003
@@ -40,12 +40,9 @@ enum {
MallocCfg_skip_cfg_env,
MallocCfg_cfg_env_read,
-
- MallocCfg_emergency_buffer,
MallocCfg_emergency_buffer_size,
MallocCfg_emergency_buffer_last_req,
- MallocCfg_emergency_buffer_prepared,
MallocCfg_emergency_buffer_prepared_size,
MallocCfg_last
--- ./malloc.c~ Wed Jun 18 18:54:30 2003
+++ ./malloc.c Wed Jun 18 19:51:26 2003
@@ -1045,8 +1045,6 @@ static IV MallocCfg[MallocCfg_last] = {
1, /* FILL_CHECK */
0, /* MallocCfg_skip_cfg_env */
0, /* MallocCfg_cfg_env_read */
- 0, /* MallocCfg_emergency_buffer */
- 0, /* MallocCfg_emergency_buffer_prepared */
0, /* MallocCfg_emergency_buffer_size */
0, /* MallocCfg_emergency_buffer_prepared_size */
0 /* MallocCfg_emergency_buffer_last_req */
@@ -1067,7 +1065,6 @@ IV *MallocCfg_ptr = MallocCfg;
# define sbrk_goodness MallocCfg[MallocCfg_sbrk_goodness]
-# define emergency_buffer ((char*)MallocCfg[MallocCfg_emergency_buffer])
# define emergency_buffer_size MallocCfg[MallocCfg_emergency_buffer_size]
# define emergency_buffer_last_req MallocCfg[MallocCfg_emergency_buffer_last_req]
@@ -1107,8 +1104,10 @@ static u_int goodsbrk;
# define BIG_SIZE (1<<16) /* 64K */
# endif
-# ifdef NO_MALLOC_DYNAMIC_CFG
static char *emergency_buffer;
+static char *emergency_buffer_prepared;
+
+# ifdef NO_MALLOC_DYNAMIC_CFG
static MEM_SIZE emergency_buffer_size;
/* 0 if the last request for more memory succeeded.
Otherwise the size of the failing request. */
@@ -1158,10 +1157,10 @@ perl_get_emergency_buffer(IV *size)
static char *
get_emergency_buffer(IV *size)
{
- char *pv = (char*)MallocCfg[MallocCfg_emergency_buffer_prepared];
+ char *pv = emergency_buffer_prepared;
*size = MallocCfg[MallocCfg_emergency_buffer_prepared_size];
- MallocCfg[MallocCfg_emergency_buffer_prepared] = 0;
+ emergency_buffer_prepared = 0;
MallocCfg[MallocCfg_emergency_buffer_prepared_size] = 0;
return pv;
}
@@ -1173,9 +1172,9 @@ set_emergency_buffer(char *b, IV size)
if (PTR2UV(b) & (NEEDED_ALIGNMENT - 1))
return -1;
if (MallocCfg[MallocCfg_emergency_buffer_prepared_size])
- add_to_chain((void*)MallocCfg[MallocCfg_emergency_buffer_prepared],
+ add_to_chain((void*)emergency_buffer_prepared,
MallocCfg[MallocCfg_emergency_buffer_prepared_size], 0);
- MallocCfg[MallocCfg_emergency_buffer_prepared] = PTR2UV(b);
+ emergency_buffer_prepared = b;
MallocCfg[MallocCfg_emergency_buffer_prepared_size] = size;
return 0;
}
Thread Previous
|
Thread Next