Files
mars-flaim/flaim/src/fobjtrck.h
dsandersoremutah c55dab446f Renamed version4 to flaim and version5 to xflaim
git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@7 0109f412-320b-0410-ab79-c3e0c5ffbbe6
2006-01-27 21:06:39 +00:00

169 lines
3.8 KiB
C++

//-------------------------------------------------------------------------
// Desc: Object reference tracker - definitions.
// Tabs: 3
//
// Copyright (c) 1999-2000,2002-2006 Novell, Inc. All Rights Reserved.
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of version 2 of the GNU General Public
// License as published by the Free Software Foundation.
//
// 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, contact Novell, Inc.
//
// To contact Novell about this file by physical or electronic mail,
// you may find current contact information at www.novell.com
//
// $Id: fobjtrck.h 12329 2006-01-20 17:49:30 -0700 (Fri, 20 Jan 2006) ahodgkinson $
//-------------------------------------------------------------------------
#ifndef FOBJTRCK_H
#define FOBJTRCK_H
#include "fpackon.h"
// IMPORTANT NOTE: No other include files should follow this one except
// for fpackoff.h
/*
Forward references
*/
class F_ObjRefTracker;
/*
Callbacks
*/
typedef RCODE (* ADDR_FMT_HOOK)( // Address formatter / translator
F_ObjRefTracker * pRefTracker, // Reference tracker object
void * pAddress, // Pointer to the address
FLMBYTE * pucBuffer, // Buffer for formatted address
FLMUINT uiSize, // Size of buffer
void * pvUserData); // User-supplied callback data
/****************************************************************************
Object reference tracker
****************************************************************************/
class F_ObjRefTracker
{
public:
F_ObjRefTracker( void);
virtual ~F_ObjRefTracker( void);
RCODE setup(
const char * pszObjName,
FLMBOOL bLogToFile = FALSE);
void trackRef(
void * pReferenceID,
void * pSubrefID = NULL);
void untrackRef(
void * referenceID,
void * subrefID = NULL);
void checkForUnreleasedRefs(
FLMUINT * puiCount = NULL);
void setAddressFormatter(
ADDR_FMT_HOOK pFunc,
void * pvUserData);
FINLINE void setModuleHandle(
void * pModHandle)
{
m_pModHandle = pModHandle;
}
private:
F_MUTEX m_hRefListMutex;
F_ListMgr * m_pListManager;
F_ListNode m_lnode;
FLMUINT m_lOptions;
FLMUINT m_lCallStackDepth;
#define FORTRACK_MAX_OBJ_NAME_LEN 63
char m_pszObjName[ FORTRACK_MAX_OBJ_NAME_LEN + 1];
F_FileSystemImp * m_pFileSystem;
FLMBOOL m_bLocalFS; // Was the file system allocated for this object?
ADDR_FMT_HOOK m_pAddrFmtHook;
void * m_pUserData;
void * m_pModHandle;
char m_pLogPath[ F_PATH_MAX_SIZE];
void formatAddress(
char * pucBuffer,
FLMUINT uiSize,
void * pAddress);
static void getCallStack(
void * stack[],
FLMUINT uiCount,
FLMUINT uiSkip);
void logError(
const char * pucMessage);
RCODE logMessage(
const char * pucMessage,
F_FileHdl * pFileHdl,
FLMUINT & uiFileCursor);
};
# define CTRC_STACK_SIZE 20
class TrackingRecord : public F_ListItem
{
public:
TrackingRecord( void * pReferenceID, void * pSubrefID)
{
m_pReferenceID = pReferenceID;
m_pSubrefID = pSubrefID;
m_uiThreadID = f_threadId();
f_memset( m_stack, 0, sizeof(m_stack));
}
virtual ~TrackingRecord()
{
}
void * getReferenceID()
{
return m_pReferenceID;
}
void * getSubrefID()
{
return m_pSubrefID;
}
FLMUINT getThreadID()
{
return m_uiThreadID;
}
void * getStack()
{
return m_stack;
}
private:
void * m_pReferenceID;
void * m_pSubrefID;
FLMUINT m_uiThreadID;
void * m_stack[CTRC_STACK_SIZE+1];
};
#include "fpackoff.h"
#endif //FORTRACK_H