⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pool_dbg.c

📁 基于sip协议的网络电话源码
💻 C
字号:
/* $Id: pool_dbg.c 974 2007-02-19 01:13:53Z bennylp $ *//*  * Copyright (C)2003-2007 Benny Prijono <benny@prijono.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */#include <pj/pool.h>#include <pj/string.h>#if PJ_POOL_DEBUG#if PJ_HAS_MALLOC_H#   include <malloc.h>#endif#if PJ_HAS_STDLIB_H#   include <stdlib.h>#endif#if defined(PJ_WIN32) && PJ_WIN32!=0 && defined(PJ_DEBUG) && PJ_DEBUG!=0 \    && !PJ_NATIVE_STRING_IS_UNICODE#   include <windows.h>#   define TRACE_(msg)	OutputDebugString(msg)#endif/* Uncomment this to enable TRACE_ *///#undef TRACE_struct pj_pool_mem{    struct pj_pool_mem *next;    /* data follows immediately */};struct pj_pool_t{    struct pj_pool_mem *first_mem;    pj_size_t		used_size;    pj_pool_callback   *cb;};int PJ_NO_MEMORY_EXCEPTION;/* Create pool */PJ_DEF(pj_pool_t*) pj_pool_create_imp( const char *file, int line,				       void *factory,				       const char *name,				       pj_size_t initial_size,				       pj_size_t increment_size,				       pj_pool_callback *callback){    pj_pool_t *pool;    PJ_UNUSED_ARG(file);    PJ_UNUSED_ARG(line);    PJ_UNUSED_ARG(factory);    PJ_UNUSED_ARG(name);    PJ_UNUSED_ARG(initial_size);    PJ_UNUSED_ARG(increment_size);    pool = malloc(sizeof(struct pj_pool_t));    if (!pool)	return NULL;    pool->first_mem = NULL;    pool->used_size = 0;    pool->cb = callback;    return pool;}/* Release pool */PJ_DEF(void) pj_pool_release_imp(pj_pool_t *pool){    pj_pool_reset(pool);    free(pool);}/* Get pool name */PJ_DEF(const char*) pj_pool_getobjname_imp(pj_pool_t *pool){    PJ_UNUSED_ARG(pool);    return "pooldbg";}/* Reset pool */PJ_DEF(void) pj_pool_reset_imp(pj_pool_t *pool){    struct pj_pool_mem *mem;    mem = pool->first_mem;    while (mem) {	struct pj_pool_mem *next = mem->next;	free(mem);	mem = next;    }    pool->first_mem = NULL;}/* Get capacity */PJ_DEF(pj_size_t) pj_pool_get_capacity_imp(pj_pool_t *pool){    PJ_UNUSED_ARG(pool);    /* Unlimited capacity */    return 0x7FFFFFFFUL;}/* Get total used size */PJ_DEF(pj_size_t) pj_pool_get_used_size_imp(pj_pool_t *pool){    return pool->used_size;}/* Allocate memory from the pool */PJ_DEF(void*) pj_pool_alloc_imp( const char *file, int line, 				 pj_pool_t *pool, pj_size_t sz){    struct pj_pool_mem *mem;    PJ_UNUSED_ARG(file);    PJ_UNUSED_ARG(line);    mem = malloc(sz + sizeof(struct pj_pool_mem));    if (!mem) {	if (pool->cb)	    (*pool->cb)(pool, sz);	return NULL;    }    mem->next = pool->first_mem;    pool->first_mem = mem;#ifdef TRACE_    {	char msg[120];	pj_ansi_sprintf(msg, "Mem %X (%d+%d bytes) allocated by %s:%d\r\n",			mem, sz, sizeof(struct pj_pool_mem), 			file, line);	TRACE_(msg);    }#endif    return ((char*)mem) + sizeof(struct pj_pool_mem);}/* Allocate memory from the pool and zero the memory */PJ_DEF(void*) pj_pool_calloc_imp( const char *file, int line, 				  pj_pool_t *pool, unsigned cnt, 				  unsigned elemsz){    void *mem;    mem = pj_pool_alloc_imp(file, line, pool, cnt*elemsz);    if (!mem)	return NULL;    pj_bzero(mem, cnt*elemsz);    return mem;}/* Allocate memory from the pool and zero the memory */PJ_DEF(void*) pj_pool_zalloc_imp( const char *file, int line, 				  pj_pool_t *pool, pj_size_t sz){    return pj_pool_calloc_imp(file, line, pool, 1, sz);}#endif	/* PJ_POOL_DEBUG */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -