📄 macros.h
字号:
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 + -