]> granicus.if.org Git - python/commitdiff
Changed the #-of-arenas counters to uints -- no need to be insane about
authorTim Peters <tim.peters@gmail.com>
Sat, 30 Mar 2002 10:35:09 +0000 (10:35 +0000)
committerTim Peters <tim.peters@gmail.com>
Sat, 30 Mar 2002 10:35:09 +0000 (10:35 +0000)
this.  But added an overflow check just in case there is.

Got rid of the ushort macro.  It wasn't used anymore (it was only used
in the no-longer-exists off_t macro), and there's no plausible use for it.

Objects/obmalloc.c

index 3c6ae574100f7e1d6f6e2577bea6666011833a78..c766ccd7d4737d9c1e1e0af1b4fb804a0dab1e96 100644 (file)
 #undef  uchar
 #define uchar                  unsigned char   /* assuming == 8 bits  */
 
-#undef  ushort
-#define ushort                 unsigned short  /* assuming >= 16 bits */
-
 #undef  uint
 #define uint                   unsigned int    /* assuming >= 16 bits */
 
@@ -235,7 +232,7 @@ struct pool_header {
        block *freeblock;               /* pool's free list head         */
        struct pool_header *nextpool;   /* next pool of this size class  */
        struct pool_header *prevpool;   /* previous pool       ""        */
-       ulong arenaindex;               /* index into arenas of base adr */
+       uint arenaindex;                /* index into arenas of base adr */
        uint szidx;                     /* block size class index        */
        uint capacity;                  /* pool capacity in # of blocks  */
 };
@@ -312,8 +309,8 @@ static poolp freepools = NULL;              /* free list for cached pools */
  * to the OS.
  */
 static uptr *arenas = NULL;
-static ulong narenas = 0;
-static ulong maxarenas = 0;
+static uint narenas = 0;
+static uint maxarenas = 0;
 
 /* Number of pools still available to be allocated in the current arena. */
 static uint nfreepools = 0;
@@ -330,7 +327,7 @@ dumpem(void *ptr)
 {
        if (ptr)
                printf("inserted new arena at %08x\n", ptr);
-       printf("# arenas %d\n", narenas);
+       printf("# arenas %u\n", narenas);
        printf("was mine %lu wasn't mine %lu\n", wasmine, wasntmine);
 }
 #define INCMINE ++wasmine
@@ -403,8 +400,12 @@ new_arena(void)
                 * XXX until after the PyMem_FREE(oldarenas) below completes.
                 */
                uptr *oldarenas;
-               int newmax = maxarenas + (maxarenas >> 1);
-               uptr *p = (uptr *)PyMem_MALLOC(newmax * sizeof(*arenas));
+               uptr *p;
+               uint newmax = maxarenas + (maxarenas >> 1);
+
+               if (newmax <= maxarenas)        /* overflow */
+                       goto error;
+               p = (uptr *)PyMem_MALLOC(newmax * sizeof(*arenas));
                if (p == NULL)
                        goto error;
                memcpy(p, arenas, narenas * sizeof(*arenas));
@@ -417,7 +418,7 @@ new_arena(void)
        /* Append the new arena address to arenas. */
        assert(narenas < maxarenas);
        arenas[narenas] = (uptr)bp;
-       ++narenas;
+       ++narenas;      /* can't overflow, since narenas < maxarenas before */
        dumpem(bp);
        return bp;