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];
}
Beispiel #2
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;
}
Beispiel #3
0
/**
 * 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;
}