This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Faster sv_utf8_upgrade()
[perl5.git] / malloc.c
index a8d4554..7234801 100644 (file)
--- a/malloc.c
+++ b/malloc.c
@@ -3,7 +3,9 @@
  */
 
 /*
- * "'The Chamber of Records,' said Gimli. 'I guess that is where we now stand.'"
+ * 'The Chamber of Records,' said Gimli.  'I guess that is where we now stand.'
+ *
+ *     [p.321 of _The Lord of the Rings_, II/v: "The Bridge of Khazad-Dûm"]
  */
 
 /* This file contains Perl's own implementation of the malloc library.
@@ -970,7 +972,7 @@ static const char bucket_of[] =
 
 static void    morecore        (register int bucket);
 #  if defined(DEBUGGING)
-static void    botch           (char *diag, char *s, char *file, int line);
+static void    botch           (const char *diag, const char *s, const char *file, int line);
 #  endif
 static void    add_to_chain    (void *p, MEM_SIZE size, MEM_SIZE chip);
 static void*   get_from_chain  (MEM_SIZE size);
@@ -1281,7 +1283,7 @@ emergency_sbrk(MEM_SIZE size)
 #endif /* defined PERL_EMERGENCY_SBRK */
 
 static void
-write2(char *mess)
+write2(const char *mess)
 {
   write(2, mess, strlen(mess));
 }
@@ -1291,13 +1293,13 @@ write2(char *mess)
 #define        ASSERT(p,diag)   if (!(p)) botch(diag,STRINGIFY(p),__FILE__,__LINE__);
 
 static void
-botch(char *diag, char *s, char *file, int line)
+botch(const char *diag, const char *s, const char *file, int line)
 {
     dVAR;
+    dTHX;
     if (!(PERL_MAYBE_ALIVE && PERL_GET_THX))
        goto do_write;
     else {
-       dTHX;
        if (PerlIO_printf(PerlIO_stderr(),
                          "assertion botched (%s?): %s %s:%d\n",
                          diag, s, file, line) != 0) {
@@ -2293,6 +2295,8 @@ Perl_realloc(void *mp, size_t nbytes)
                nmalloc[bucket]--;
                nmalloc[pow * BUCKETS_PER_POW2]++;
 #endif             
+               if (pow * BUCKETS_PER_POW2 > (MEM_SIZE)max_bucket)
+                   max_bucket = pow * BUCKETS_PER_POW2;
                *(cp - M_OVERHEAD) = pow * BUCKETS_PER_POW2; /* Fill index. */
                MALLOC_UNLOCK;
                goto inplace_label;
@@ -2463,7 +2467,7 @@ Perl_get_mstats(pTHX_ perl_mstats_t *buf, int buflen, int level)
  * frees for each size category.
  */
 void
-Perl_dump_mstats(pTHX_ char *s)
+Perl_dump_mstats(pTHX_ const char *s)
 {
 #ifdef DEBUGGING_MSTATS
        register int i;