⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 macros.h

📁 telcobridges pri develop,30b+d
💻 H
📖 第 1 页 / 共 2 页
字号:
	if( (_un32AdapterIdx) >= g_AppContext->un32NbAdapter )															\
	{																												\
		TB640_ISDN_LOG																								\
		(																											\
			TRACE_LEVEL_ALWAYS,																					\
			"ERROR Can't lock semaphore, invalid adapter index %u\n"												\
			"      Thread %u, line %d of file %s\n",															\
			(unsigned int)(_un32AdapterIdx),																		\
			(unsigned int)(CurrentThreadId()),																		\
			(unsigned int)(__LINE__),																				\
			__FILE__																								\
		);																											\
	} 																												\
	else if( (_un32TrunkIdx) >= TB640_ISDN_MAX_SUPPORTED_TRUNKS_PER_ADAPTER )										\
	{																												\
		TB640_ISDN_LOG																								\
		(																											\
			TRACE_LEVEL_ALWAYS,																					\
			"ERROR Can't lock semaphore, invalid trunk index %u\n"													\
			"      Thread %u, line %d of file %s\n",																\
			(unsigned int)(_un32TrunkIdx),																			\
			(unsigned int)(CurrentThreadId()),																		\
			(unsigned int)(__LINE__),																				\
			__FILE__																								\
		);																											\
	} 																												\
	else																											\
	{																												\
		pAdapterInfo = &(g_AppContext->ahAdapterInfo [_un32AdapterIdx]);											\
		pTrunkInfo = &(pAdapterInfo->aTrunkInfo [_un32TrunkIdx]);													\
																													\
		TB640IsdnLockFromOpLibIdx( pAdapterInfo, pTrunkInfo->un32OpLibIdx );										\
	} 																												\
}

/* Macro that locks the lock for the specified async op context */
#define TB640IsdnLockFromOpLibIdx( _pAdapterInfo, _OpLibIdx )														\
{																													\
	/* Validation */																								\
	if( (_OpLibIdx) >= TB640_ISDN_NB_OPERATION_LIBRARY_REQUIRED )													\
	{																												\
		TB640_ISDN_LOG																								\
		(																											\
			TRACE_LEVEL_ALWAYS,																					\
			"ERROR Can't lock semaphore, invalid operation lib index %u\n"											\
			"      Thread %u, line %d of file %s\n",																\
			(unsigned int)(_OpLibIdx),																				\
			(unsigned int)(CurrentThreadId()),																		\
			(unsigned int)(__LINE__),																				\
			__FILE__																								\
		);																											\
	} 																												\
	else if( (_pAdapterInfo)->Lock.aun32OperationLibSemProcess [_OpLibIdx] == (TBX_UINT32)CurrentThreadId() )		\
	{																												\
		/* Dead-lock detected! */																					\
/*__asm{ int 3 };*/	\
		TB640_ISDN_LOG																								\
		(																											\
			TRACE_LEVEL_ALWAYS,																					\
			"ERROR Can't lock semaphore op index %d, already locked by current thread\n"							\
			"      Locked by thread %u line %u of file %s\n"														\
			"      Thread %u, line %d of file %s\n",																\
			(unsigned int)(_OpLibIdx),																				\
			(unsigned int)((_pAdapterInfo)->Lock.aun32OperationLibSemProcess [_OpLibIdx]),							\
			(unsigned int)((_pAdapterInfo)->Lock.aun32OperationLibSemLine [_OpLibIdx]),								\
			(_pAdapterInfo)->Lock.apszOperationLibSemFile [_OpLibIdx],												\
			(unsigned int)(CurrentThreadId()),																		\
			(unsigned int)(__LINE__),																				\
			__FILE__																								\
		);																											\
	}																												\
	else																											\
	{																												\
		TBX_SEM_GET( (_pAdapterInfo)->Lock.aOperationLibSem [_OpLibIdx], TBX_SEM_WAIT_FOREVER );					\
		(_pAdapterInfo)->Lock.apszOperationLibSemFile [_OpLibIdx]		= __FILE__;									\
		(_pAdapterInfo)->Lock.aun32OperationLibSemLine [_OpLibIdx]		= __LINE__;									\
		(_pAdapterInfo)->Lock.aun32OperationLibSemProcess [_OpLibIdx]	= (TBX_UINT32)CurrentThreadId();			\
	}																												\
}

/* Macro that unlocks the lock for the specified adapter / trunk */
#define TB640IsdnUnlock( _un32AdapterIdx, _un32TrunkIdx )															\
{																													\
	PTB640_ISDN_ADAPTER_INFO						pAdapterInfo;													\
	PTB640_ISDN_TRUNK_INFO							pTrunkInfo;														\
																													\
	/* Validation */																								\
	if( (_un32AdapterIdx) >= g_AppContext->un32NbAdapter )															\
	{																												\
		TB640_ISDN_LOG																								\
		(																											\
			TRACE_LEVEL_ALWAYS,																					\
			"ERROR Can't unlock semaphore, invalid adapter index %u\n"												\
			"      Thread %u, line %d of file %s\n",																\
			(unsigned int)(_un32AdapterIdx),																		\
			(unsigned int)(CurrentThreadId()),																		\
			(unsigned int)(__LINE__),																				\
			__FILE__																								\
		);																											\
	} 																												\
	else if( (_un32TrunkIdx) >= TB640_ISDN_MAX_SUPPORTED_TRUNKS_PER_ADAPTER )										\
	{																												\
		TB640_ISDN_LOG																								\
		(																											\
			TRACE_LEVEL_ALWAYS,																					\
			"ERROR Can't unlock semaphore, invalid trunk index %u\n"													\
			"      Thread %u, line %d of file %s\n",																\
			(unsigned int)(_un32TrunkIdx),																			\
			(unsigned int)(CurrentThreadId()),																		\
			(unsigned int)(__LINE__),																				\
			__FILE__																								\
		);																											\
	} 																												\
	else																											\
	{																												\
		pAdapterInfo = &(g_AppContext->ahAdapterInfo [_un32AdapterIdx]);											\
		pTrunkInfo = &(pAdapterInfo->aTrunkInfo [_un32TrunkIdx]);													\
																													\
		TB640IsdnUnlockFromOpLibIdx( pAdapterInfo, pTrunkInfo->un32OpLibIdx );										\
	} 																												\
}

/* Macro that unlocks the lock for the specified async op context */
#define TB640IsdnUnlockFromOpLibIdx( _pAdapterInfo, _OpLibIdx )														\
{																													\
	/* Validation */																								\
	if( (_OpLibIdx) >= TB640_ISDN_NB_OPERATION_LIBRARY_REQUIRED )													\
	{																												\
		TB640_ISDN_LOG																								\
		(																											\
			TRACE_LEVEL_ALWAYS,																					\
			"ERROR Can't unlock semaphore, invalid operation lib index %u\n"										\
			"      Thread %u line %d of file %s\n",																	\
			(unsigned int)(_OpLibIdx),																				\
			(unsigned int)(CurrentThreadId()),																		\
			(unsigned int)(__LINE__),																				\
			__FILE__																								\
		);																											\
	} 																												\
	else if( (_pAdapterInfo)->Lock.aun32OperationLibSemProcess [_OpLibIdx] != CurrentThreadId() )					\
	{																												\
		/* This is a bug!!! */																						\
		TB640_ISDN_LOG																								\
		(																											\
			TRACE_LEVEL_ALWAYS,																					\
			"ERROR Wrong thread unlocking sem operation lib index %d\n"												\
			"      Locked by thread %u line %u of file %s\n"														\
			"      Thread %u trying to unlock from line %u of file %s\n",											\
			(unsigned int)(_OpLibIdx),																				\
			(unsigned int)((_pAdapterInfo)->Lock.aun32OperationLibSemProcess [_OpLibIdx]),							\
			(unsigned int)((_pAdapterInfo)->Lock.aun32OperationLibSemLine [_OpLibIdx]),								\
			(_pAdapterInfo)->Lock.apszOperationLibSemFile [_OpLibIdx],												\
			(unsigned int)(CurrentThreadId()),																		\
			(unsigned int)(__LINE__),																				\
			__FILE__																								\
		);																											\
	}																												\
	else																											\
	{																												\
		(_pAdapterInfo)->Lock.apszOperationLibSemFile [_OpLibIdx]		= "";										\
		(_pAdapterInfo)->Lock.aun32OperationLibSemLine [_OpLibIdx]		= 0;										\
		(_pAdapterInfo)->Lock.aun32OperationLibSemProcess [_OpLibIdx]	= 0;										\
		TBX_SEM_GIV( (_pAdapterInfo)->Lock.aOperationLibSem [_OpLibIdx] );											\
	}																												\
}


/* Macro that validates that the caller is the owner of the lock */
#define TB640IsdnCheckLock( _un32AdapterIdx, _un32TrunkIdx )														\
{																													\
	PTB640_ISDN_ADAPTER_INFO						pAdapterInfo;													\
	PTB640_ISDN_TRUNK_INFO							pTrunkInfo;														\
																													\
	if( (_un32AdapterIdx) >= g_AppContext->un32NbAdapter )															\
	{																												\
		TB640_ISDN_LOG																								\
		(																											\
			TRACE_LEVEL_ALWAYS,																					\
			"ERROR Can't check semaphore, invalid adapter index %u\n"												\
			"      Thread %u, line %d of file %s\n",																\
			(unsigned int)(_un32AdapterIdx),																		\
			(unsigned int)(CurrentThreadId()),																		\
			(unsigned int)(__LINE__),																				\
			__FILE__																								\
		);																											\
	} 																												\
	if( (_un32TrunkIdx) >= TB640_ISDN_MAX_SUPPORTED_TRUNKS_PER_ADAPTER )											\
	{																												\
		TB640_ISDN_LOG																								\
		(																											\
			TRACE_LEVEL_ALWAYS,																					\
			"ERROR Can't check semaphore, invalid trunk index %u\n"													\
			"      Thread %u, line %d of file %s\n",																\
			(unsigned int)(_un32TrunkIdx),																			\
			(unsigned int)(CurrentThreadId()),																		\
			(unsigned int)(__LINE__),																				\
			__FILE__																								\
		);																											\
	} 																												\
																													\
	pAdapterInfo = &(g_AppContext->ahAdapterInfo [_un32AdapterIdx]);												\
	pTrunkInfo = &(pAdapterInfo->aTrunkInfo [_un32TrunkIdx]);														\
																													\
	TB640IsdnCheckLockFromOpLibIdx( pAdapterInfo, pTrunkInfo->un32OpLibIdx );										\
}

/* Macro that validates that the caller is the owner of the lock */
#define TB640IsdnCheckLockFromOpLibIdx( _pAdapterInfo, _OpLibIdx )													\
{																													\
	if( (_pAdapterInfo)->Lock.aun32OperationLibSemProcess [_OpLibIdx] == 0 )										\
	{																												\
		/* This is a bug!!! */																						\
		TB640_ISDN_LOG																								\
		(																											\
			TRACE_LEVEL_ALWAYS,																					\
			"ERROR Thread isn't locked - sem operation lib index %d\n"												\
			"      Thread %u trying to unlock from line %u of file %s\n",											\
			(unsigned int)(_OpLibIdx),																				\
			(unsigned int)(CurrentThreadId()),																		\
			(unsigned int)(__LINE__),																				\
			__FILE__																								\
		);																											\
	}																												\
	else if( (_pAdapterInfo)->Lock.aun32OperationLibSemProcess [_OpLibIdx] &&										\
		(_pAdapterInfo)->Lock.aun32OperationLibSemProcess [_OpLibIdx] != CurrentThreadId() )						\
	{																												\
		/* This is a bug!!! */																						\
		TB640_ISDN_LOG																								\
		(																											\
			TRACE_LEVEL_ALWAYS,																					\
			"ERROR Wrong thread locking sem operation lib index %d\n"												\
			"      Locked thread %u, line %u of file %s\n"															\
			"      Thread %u trying to unlock from line %u of file %s\n",											\
			(unsigned int)(_OpLibIdx),																				\
			(unsigned int)((_pAdapterInfo)->Lock.aun32OperationLibSemProcess [_OpLibIdx]),							\
			(unsigned int)((_pAdapterInfo)->Lock.aun32OperationLibSemLine [_OpLibIdx]),								\
			(_pAdapterInfo)->Lock.apszOperationLibSemFile [_OpLibIdx],												\
			(unsigned int)(CurrentThreadId()),																		\
			(unsigned int)(__LINE__),																				\
			__FILE__																								\
		);																											\
	}																												\
}

/*--------------------------------------------------------------------------------------------------------------------------------
 |  Function Prototypes
 *------------------------------------------------------------------------------------------------------------------------------*/


/*--------------------------------------------------------------------------------------------------------------------------------
 |  C++ support
 *------------------------------------------------------------------------------------------------------------------------------*/
#ifdef __cplusplus
}
#endif /* __cplusplus */


#endif /* __MACROS_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -