diff options
| author | shishir gowda <shishirng@gluster.com> | 2010-08-18 07:49:15 +0000 | 
|---|---|---|
| committer | Anand V. Avati <avati@dev.gluster.com> | 2010-08-18 06:55:46 -0700 | 
| commit | 3c75958d1948753976405f848f59326fc1896c95 (patch) | |
| tree | f66374dd0257add11eafd50ed1b6093ed4f80b37 /libglusterfs/src/mem-pool.c | |
| parent | 0b890833c8cba9bac71877e528d810eba91dd1e6 (diff) | |
Fix memory corruption in mem pool
Added new interface mem_get0, which calls memset on the
mem pool entries being returned.
Gluster and Kernel compile should now succeed.
Signed-off-by: shishir gowda <shishirng@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 1393 (Gluster and kernel compile fails)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1393
Diffstat (limited to 'libglusterfs/src/mem-pool.c')
| -rw-r--r-- | libglusterfs/src/mem-pool.c | 35 | 
1 files changed, 35 insertions, 0 deletions
diff --git a/libglusterfs/src/mem-pool.c b/libglusterfs/src/mem-pool.c index f1a2c98de84..aec1d909dde 100644 --- a/libglusterfs/src/mem-pool.c +++ b/libglusterfs/src/mem-pool.c @@ -337,6 +337,41 @@ mem_pool_new_fn (unsigned long sizeof_type,  	return mem_pool;  } +void* +mem_get0 (struct mem_pool *mem_pool) +{ +        struct list_head *list = NULL; +        void             *ptr = NULL; + +        if (!mem_pool) { +                gf_log ("mem-pool", GF_LOG_ERROR, "invalid argument"); +                return NULL; +        } + +        LOCK (&mem_pool->lock); +        { +                if (mem_pool->cold_count) { +                        list = mem_pool->list.next; +                        list_del (list); + +                        mem_pool->hot_count++; +                        mem_pool->cold_count--; + +                        ptr = list; +                        goto fwd_addr_out; +                } +                ptr = MALLOC (mem_pool->real_sizeof_type); +                goto unlocked_out; +        } +fwd_addr_out: +        ptr = mem_pool_chunkhead2ptr (ptr); +unlocked_out: + +         memset(ptr, 0, mem_pool->real_sizeof_type); +        UNLOCK (&mem_pool->lock); + +        return ptr; +}  void *  mem_get (struct mem_pool *mem_pool)  | 
