void *malloc (size_t len) { void *ret; void *caller; int track_this = 0; if (mallocp == NULL) { _alloc_init(); } if (no_hook) { ret = _do_malloc(len, mallocp, &track_this); goto _return; } no_hook = 1; ret = _do_malloc(len, mallocp, &track_this); void *callers[RW_RESOURCE_TRACK_MAX_CALLERS+2]; if (track_this) { int callstack_depth = g_callstack_depth; rw_btrace_backtrace(callers, callstack_depth+2); memset(&callers[callstack_depth+2], '\0', (RW_RESOURCE_TRACK_MAX_CALLERS-callstack_depth)*sizeof(callers[0])); caller = (void*)(&callers[2]); if (g_tasklet_info) MEM_ALLOC_PRINTF("%p-%p malloc(%zu", caller, g_tasklet_info, len); if (g_tasklet_info) MEM_ALLOC_PRINTF(") -> %p\n", ret); _add_tracking(ret, len, "malloc", (void*)(&callers[2])); } no_hook = 0; _return: return ret; caller = caller; callers[0] = callers[0]; }
/** * Create slist container auxiliary function. */ bool_t _create_slist_auxiliary(slist_t* pslist_slist, const char* s_typename) { assert(pslist_slist != NULL); assert(s_typename != NULL); _type_get_type(&pslist_slist->_t_typeinfo, s_typename); if (pslist_slist->_t_typeinfo._t_style == _TYPE_INVALID) { return false; } pslist_slist->_t_head._pt_next = NULL; _alloc_init(&pslist_slist->_t_allocator); return true; }
/** * Initialize the register and register c builtin type and cstl builtin type */ void _type_init(void) { size_t i = 0; /* set register hash table */ for (i = 0; i < _TYPE_REGISTER_BUCKET_COUNT; ++i) { _gt_typeregister._apt_bucket[i] = NULL; } /* init allocator */ _alloc_init(&_gt_typeregister._t_allocator); _type_register_c_builtin(); _type_register_cstl_builtin(); _gt_typeregister._t_isinit = true; }
/** * Create vector container auxiliary function. */ bool_t _create_vector_auxiliary(vector_t* pvec_vector, const char* s_typename) { assert(pvec_vector != NULL); assert(s_typename != NULL); _type_get_type(&pvec_vector->_t_typeinfo, s_typename); if (pvec_vector->_t_typeinfo._t_style == _TYPE_INVALID) { return false; } pvec_vector->_pby_start = NULL; pvec_vector->_pby_finish = NULL; pvec_vector->_pby_endofstorage = NULL; _alloc_init(&pvec_vector->_t_allocator); return true; }
/** * Create avl tree container auxiliary function. */ bool_t _create_avl_tree_auxiliary(_avl_tree_t* pt_avl_tree, const char* s_typename) { assert(pt_avl_tree != NULL); assert(s_typename != NULL); /* get type information */ _type_get_type(&pt_avl_tree->_t_typeinfo, s_typename); if(pt_avl_tree->_t_typeinfo._t_style == _TYPE_INVALID) { return false; } pt_avl_tree->_t_avlroot._pt_parent = NULL; pt_avl_tree->_t_avlroot._pt_left = NULL; pt_avl_tree->_t_avlroot._pt_right = NULL; pt_avl_tree->_t_avlroot._un_height = 0; pt_avl_tree->_t_nodecount = 0; pt_avl_tree->_t_compare = NULL; _alloc_init(&pt_avl_tree->_t_allocator); return true; }