Exemplo n.º 1
0
// トラッキングの初期化
void InitTracking()
{
    UINT i;
    CALLSTACK_DATA *s;

    // ハッシュリスト初期化
    hashlist = (TRACKING_LIST **)OSMemoryAlloc(sizeof(TRACKING_LIST *) * TRACKING_NUM_ARRAY);

    for (i = 0; i < TRACKING_NUM_ARRAY; i++)
    {
        hashlist[i] = NULL;
    }

    obj_id = 0;

    // ロック作成
    obj_lock = OSNewLock();
    obj_id_lock = OSNewLock();
    cs_lock = OSNewLock();

    s = GetCallStack();
    if (s == NULL)
    {
        do_not_get_callstack = true;
    }
    else
    {
        do_not_get_callstack = false;
        FreeCallStack(s);
    }
}
Exemplo n.º 2
0
// オブジェクトをトラッキングリストに挿入
void InsertTrackingList(TRACKING_OBJECT *o)
{
    UINT i;
    TRACKING_LIST *t;
    // 引数チェック
    if (o == NULL)
    {
        return;
    }

    t = OSMemoryAlloc(sizeof(TRACKING_LIST));
    t->Object = o;
    t->Next = NULL;

    i = TRACKING_HASH(o->Address);

    if (hashlist[i] == NULL)
    {
        hashlist[i] = t;
    }
    else
    {
        TRACKING_LIST *tt = hashlist[i];
        while (true)
        {
            if (tt->Next == NULL)
            {
                tt->Next = t;
                break;
            }

            tt = tt->Next;
        }
    }
}
Exemplo n.º 3
0
// 新しいオブジェクトを追跡リストに入れる
void TrackNewObj(UINT64 addr, char *name, UINT size)
{
    TRACKING_OBJECT *o;
    UINT new_id;
    // 引数チェック
    if (addr == 0 || name == NULL)
    {
        return;
    }

    if (IsMemCheck() == false)
    {
        // リリースモードでは追跡しない
        return;
    }

    if (disable_tracking)
    {
        return;
    }

    // 新しい ID の生成
    OSLock(obj_id_lock);
    {
        new_id = ++obj_id;
    }
    OSUnlock(obj_id_lock);

    o = OSMemoryAlloc(sizeof(TRACKING_OBJECT));
    o->Id = new_id;
    o->Address = addr;
    o->Name = name;
    o->Size = size;
    o->CreatedDate = LocalTime64();
    o->CallStack = WalkDownCallStack(GetCallStack(), 2);

    o->FileName[0] = 0;
    o->LineNumber = 0;

    LockTrackingList();
    {
        InsertTrackingList(o);
    }
    UnlockTrackingList();
}
Exemplo n.º 4
0
// Put a new object into the tracking list
void TrackNewObj(UINT64 addr, char *name, UINT size)
{
	TRACKING_OBJECT *o;
	UINT new_id;
	// Validate arguments
	if (addr == 0 || name == NULL)
	{
		return;
	}

	if (IsMemCheck() == false)
	{
		// Don't track in the release mode
		return;
	}

	if (disable_tracking)
	{
		return;
	}

	// Generate a new ID
	OSLock(obj_id_lock);
	{
		new_id = ++obj_id;
	}
	OSUnlock(obj_id_lock);

	o = OSMemoryAlloc(sizeof(TRACKING_OBJECT));
	o->Id = new_id;
	o->Address = addr;
	o->Name = name;
	o->Size = size;
	o->CreatedDate = LocalTime64();
	o->CallStack = WalkDownCallStack(GetCallStack(), 2);

	o->FileName[0] = 0;
	o->LineNumber = 0;

	LockTrackingList();
	{
		InsertTrackingList(o);
	}
	UnlockTrackingList();
}