コード例 #1
0
ファイル: Tracking.c プロジェクト: falcon8823/utvpn
// 現在のコールスタックの取得
CALLSTACK_DATA *GetCallStack()
{
    CALLSTACK_DATA *s;
    if (do_not_get_callstack)
    {
        // コールスタックは取得しない
        return NULL;
    }

    OSLock(cs_lock);
    {
        // コールスタックの取得
        s = OSGetCallStack();
    }
    OSUnlock(cs_lock);
    if (s == NULL)
    {
        return NULL;
    }

    // コールスタックを 3 つ分だけ下降する
    s = WalkDownCallStack(s, 3);

    return s;
}
コード例 #2
0
ファイル: Tracking.c プロジェクト: BIGbozi/SoftEtherVPN
// Get the current call stack
CALLSTACK_DATA *GetCallStack()
{
	CALLSTACK_DATA *s;
	if (do_not_get_callstack)
	{
		// Not to get the call stack
		return NULL;
	}

	OSLock(cs_lock);
	{
		// Get the call stack
		s = OSGetCallStack();
	}
	OSUnlock(cs_lock);
	if (s == NULL)
	{
		return NULL;
	}

	// Descend in the call stack for 3 steps
	s = WalkDownCallStack(s, 3);

	return s;
}
コード例 #3
0
ファイル: Tracking.c プロジェクト: falcon8823/utvpn
// 新しいオブジェクトを追跡リストに入れる
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();
}
コード例 #4
0
ファイル: Tracking.c プロジェクト: BIGbozi/SoftEtherVPN
// 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();
}