Diff for /libelwix/src/mem.c between versions 1.5.2.1 and 1.5.2.2

version 1.5.2.1, 2015/07/01 21:31:26 version 1.5.2.2, 2015/07/01 21:47:19
Line 250  mpool_realloc(mpool_t * __restrict mp, void * __restri Line 250  mpool_realloc(mpool_t * __restrict mp, void * __restri
         int idx, oidx;          int idx, oidx;
         void *p;          void *p;
         u_int osize;          u_int osize;
 #ifdef MPOOL_USE_REALLOC  
         struct tagAlloc *m, *tmp;  
         u_int align;  
 #endif  
   
         /* if !data execute mpool_malloc() */          /* if !data execute mpool_malloc() */
         if (!data)          if (!data)
Line 289  mpool_realloc(mpool_t * __restrict mp, void * __restri Line 285  mpool_realloc(mpool_t * __restrict mp, void * __restri
                 return NULL;                  return NULL;
         }          }
   
 #ifndef MPOOL_USE_REALLOC  
         if (oidx != idx) {          if (oidx != idx) {
                 mpool_unlock(mp);                  mpool_unlock(mp);
                 p = mpool_malloc(mp, newsize, memname);                  p = mpool_malloc(mp, newsize, memname);
Line 311  mpool_realloc(mpool_t * __restrict mp, void * __restri Line 306  mpool_realloc(mpool_t * __restrict mp, void * __restri
         }          }
   
         return p;          return p;
 #else  
         /* find old memory block */  
         TAILQ_FOREACH_SAFE(m, &mp->pool_active[oidx], alloc_node, tmp) {  
                 if (mem_data(m, void*) == data && mem_size(m) == osize) {  
                         /* case in different buckets */  
                         if (oidx != idx) {  
                                 TAILQ_REMOVE(&mp->pool_active[oidx], m, alloc_node);  
                                 /* statistics */  
                                 mp->pool_calls.alloc--;  
                         }  
                         mp->pool_bytes.alloc -= osize;  
                         break;  
                 }  
         }  
         /* memory block not found! */  
         if (!m) {  
                 mpool_unlock(mp);  
                 elwix_SetErr(EFAULT, "Memory block not found");  
                 return NULL;  
         }  
   
         /* try to reallocate memory block to new bucket */  
         if (oidx != idx) {  
                 align = 1 << (idx + MEM_MIN_BUCKET);  
                 p = realloc(m->alloc_mem, align + 12);  
                 if (!p) {  
                         LOGERR;  
   
                         /* restore to old bucket pulled memory block for reallocation */  
                         TAILQ_INSERT_HEAD(&mp->pool_active[oidx], m, alloc_node);  
                         /* statistics */  
                         mp->pool_calls.alloc++;  
                         mp->pool_bytes.alloc += osize;  
   
                         mpool_unlock(mp);  
                         return NULL;  
                 } else  
                         m->alloc_mem = (u_int*) p;  
         }  
         /* quota */  
         mp->pool_quota.curr += (u_long) newsize - osize;  
         mp->pool_quota.real += (1 << (idx + MEM_MIN_BUCKET)) - (1 << (oidx + MEM_MIN_BUCKET));  
   
         m->alloc_mem[0] = newsize / sizeof(u_int);  
         m->alloc_mem[1] = MEM_MAGIC_START;  
         m->alloc_mem[2 + newsize / sizeof(u_int)] = MEM_MAGIC_STOP;  
   
         if (oidx != idx) {  
                 TAILQ_INSERT_HEAD(&mp->pool_active[idx], m, alloc_node);  
                 /* statistics */  
                 mp->pool_calls.alloc++;  
         }  
         mp->pool_bytes.alloc += newsize;  
   
         if (memname)  
                 strlcpy(m->alloc_name, memname, sizeof m->alloc_name);  
   
         mpool_unlock(mp);  
         return mem_data(m, void*);  
 #endif  
 }  }
   
 /*  /*

Removed from v.1.5.2.1  
changed lines
  Added in v.1.5.2.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>