Small optimization in pool (removed used_size)

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@69 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjlib/include/pj/pool.h b/pjlib/include/pj/pool.h
index c47195c..93d67a9 100644
--- a/pjlib/include/pj/pool.h
+++ b/pjlib/include/pj/pool.h
@@ -151,9 +151,6 @@
     /** Current capacity allocated by the pool. */
     pj_size_t	    capacity;
 
-    /** Number of memory used/allocated. */
-    pj_size_t	    used_size;
-
     /** Size of memory block to be allocated when the pool runs out of memory */
     pj_size_t	    increment_size;
 
diff --git a/pjlib/include/pj/pool_i.h b/pjlib/include/pj/pool_i.h
index 39c0487..05db29b 100644
--- a/pjlib/include/pj/pool_i.h
+++ b/pjlib/include/pj/pool_i.h
@@ -29,24 +29,27 @@
 
 PJ_IDEF(pj_size_t) pj_pool_get_used_size( pj_pool_t *pool )
 {
-    return pool->used_size;
+    pj_pool_block *b = pool->block_list.next;
+    pj_size_t used_size = sizeof(pj_pool_t);
+    while (b != &pool->block_list) {
+	used_size += (b->cur - b->buf) + sizeof(pj_pool_block);
+	b = b->next;
+    }
+    return used_size;
 }
 
-PJ_IDEF(void*) pj_pool_alloc_from_block( pj_pool_t *pool,
-					 pj_pool_block *block, pj_size_t size )
+PJ_IDEF(void*) pj_pool_alloc_from_block( pj_pool_block *block, pj_size_t size )
 {
     /* The operation below is valid for size==0. 
      * When size==0, the function will return the pointer to the pool
      * memory address, but no memory will be allocated.
      */
     if (size & (PJ_POOL_ALIGNMENT-1)) {
-	size &= ~(PJ_POOL_ALIGNMENT-1);
-	size += PJ_POOL_ALIGNMENT;
+	size = (size + PJ_POOL_ALIGNMENT) & ~(PJ_POOL_ALIGNMENT-1);
     }
     if ((unsigned)(block->end - block->cur) >= size) {
 	void *ptr = block->cur;
 	block->cur += size;
-	pool->used_size += size;
 	return ptr;
     }
     return NULL;
@@ -54,8 +57,7 @@
 
 PJ_IDEF(void*) pj_pool_alloc( pj_pool_t *pool, pj_size_t size)
 {
-    pj_pool_block *block = pool->block_list.next;
-    void *ptr = pj_pool_alloc_from_block(pool, block, size);
+    void *ptr = pj_pool_alloc_from_block(pool->block_list.next, size);
     if (!ptr)
 	ptr = pj_pool_allocate_find(pool, size);
     return ptr;
diff --git a/pjlib/src/pj/pool.c b/pjlib/src/pj/pool.c
index 2996680..06cc009 100644
--- a/pjlib/src/pj/pool.c
+++ b/pjlib/src/pj/pool.c
@@ -45,7 +45,7 @@
     pj_assert(size >= sizeof(pj_pool_block));
 
     LOG((pool->obj_name, "create_block(sz=%u), cur.cap=%u, cur.used=%u", 
-	 size, pool->capacity, pool->used_size));
+	 size, pool->capacity, pj_pool_get_used_size(pool)));
 
     /* Request memory from allocator. */
     block = (pj_pool_block*) 
@@ -57,7 +57,6 @@
 
     /* Add capacity. */
     pool->capacity += size;
-    pool->used_size += sizeof(pj_pool_block);
 
     /* Set block attribytes. */
     block->cur = block->buf = ((unsigned char*)block) + sizeof(pj_pool_block);
@@ -86,7 +85,7 @@
     PJ_CHECK_STACK();
 
     while (block != &pool->block_list) {
-	p = pj_pool_alloc_from_block(pool, block, size);
+	p = pj_pool_alloc_from_block(block, size);
 	if (p != NULL)
 	    return p;
 	block = block->next;
@@ -97,7 +96,7 @@
     if (pool->increment_size == 0) {
 	LOG((pool->obj_name, "Can't expand pool to allocate %u bytes "
 	     "(used=%u, cap=%u)",
-	     size, pool->used_size, pool->capacity));
+	     size, pj_pool_get_used_size(pool), pool->capacity));
 	(*pool->callback)(pool, size);
 	return NULL;
     }
@@ -118,13 +117,13 @@
 
     LOG((pool->obj_name, 
 	 "%u bytes requested, resizing pool by %u bytes (used=%u, cap=%u)",
-	 size, block_size, pool->used_size, pool->capacity));
+	 size, block_size, pj_pool_get_used_size(pool), pool->capacity));
 
     block = pj_pool_create_block(pool, block_size);
     if (!block)
 	return NULL;
 
-    p = pj_pool_alloc_from_block(pool, block, size);
+    p = pj_pool_alloc_from_block(block, size);
     pj_assert(p != NULL);
 #if PJ_DEBUG
     if (p == NULL) {
@@ -142,18 +141,10 @@
 				pj_size_t increment_size,
 				pj_pool_callback *callback)
 {
-    pj_pool_block *block;
-
     PJ_CHECK_STACK();
 
     pool->increment_size = increment_size;
     pool->callback = callback;
-    pool->used_size = sizeof(*pool);
-    block = pool->block_list.next;
-    while (block != &pool->block_list) {
-	pool->used_size += sizeof(pj_pool_block);
-	block = block->next;
-    }
 
     if (name) {
 	if (strchr(name, '%') != NULL) {
@@ -237,7 +228,6 @@
     block = pool->block_list.next;
     block->cur = block->buf;
     pool->capacity = block->end - (unsigned char*)pool;
-    pool->used_size = 0;
 }
 
 /*
@@ -246,7 +236,8 @@
 PJ_DEF(void) pj_pool_reset(pj_pool_t *pool)
 {
     LOG((pool->obj_name, "reset(): cap=%d, used=%d(%d%%)", 
-	pool->capacity, pool->used_size, pool->used_size*100/pool->capacity));
+	pool->capacity, pj_pool_get_used_size(pool), 
+	pj_pool_get_used_size(pool)*100/pool->capacity));
 
     reset_pool(pool);
 }
@@ -259,7 +250,8 @@
     pj_size_t initial_size;
 
     LOG((pool->obj_name, "destroy(): cap=%d, used=%d(%d%%), block0=%p-%p", 
-	pool->capacity, pool->used_size, pool->used_size*100/pool->capacity,
+	pool->capacity, pj_pool_get_used_size(pool), 
+	pj_pool_get_used_size(pool)*100/pool->capacity,
 	((pj_pool_block*)pool->block_list.next)->buf, 
 	((pj_pool_block*)pool->block_list.next)->end));
 
diff --git a/pjlib/src/pj/pool_caching.c b/pjlib/src/pj/pool_caching.c
index 5fa5ff7..2ae39ef 100644
--- a/pjlib/src/pj/pool_caching.c
+++ b/pjlib/src/pj/pool_caching.c
@@ -174,7 +174,8 @@
 
     /* Reset pool. */
     PJ_LOG(4, (pool->obj_name, "recycle(): cap=%d, used=%d(%d%%)", 
-	       pool->capacity, pool->used_size, pool->used_size*100/pool->capacity));
+	       pool->capacity, pj_pool_get_used_size(pool), 
+	       pj_pool_get_used_size(pool)*100/pool->capacity));
     pj_pool_reset(pool);
 
     /*
@@ -207,9 +208,9 @@
         PJ_LOG(3,("cachpool", "  Dumping all active pools:"));
 	while (pool != (void*)&cp->used_list) {
 	    PJ_LOG(3,("cachpool", "   %12s: %8d of %8d (%d%%) used", pool->obj_name, 
-				  pool->used_size, pool->capacity,
-				  pool->used_size*100/pool->capacity));
-	    total_used += pool->used_size;
+				  pj_pool_get_used_size(pool), pool->capacity,
+				  pj_pool_get_used_size(pool)*100/pool->capacity));
+	    total_used += pj_pool_get_used_size(pool);
 	    total_capacity += pool->capacity;
 	    pool = pool->next;
 	}