#include "icl.h"
extern int afs_trclock;
+
+#define AFS_LOCK_TRACE_ENABLE 0
+#if AFS_LOCK_TRACE_ENABLE
+#define AFS_LOCK_TRACE(op, lock, type) \
+ if (afs_trclock) Afs_Lock_Trace(op, lock, type, __FILE__, __LINE__);
+#else
+#define AFS_LOCK_TRACE(op, lock, type)
+#endif
+
#if defined(INSTRUMENT_LOCKS)
#define ObtainReadLock(lock)\
BEGINMAC \
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, READ_LOCK);\
if (!((lock)->excl_locked & WRITE_LOCK)) \
((lock)->readers_reading)++; \
else \
#define ObtainWriteLock(lock, src)\
BEGINMAC \
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)WRITE_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, WRITE_LOCK);\
if (!(lock)->excl_locked && !(lock)->readers_reading)\
(lock) -> excl_locked = WRITE_LOCK;\
else\
#define ObtainSharedLock(lock, src)\
BEGINMAC \
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)SHARED_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, SHARED_LOCK);\
if (!(lock)->excl_locked)\
(lock) -> excl_locked = SHARED_LOCK;\
else\
#define UpgradeSToWLock(lock, src)\
BEGINMAC \
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)BOOSTED_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, BOOSTED_LOCK);\
if (!(lock)->readers_reading)\
(lock)->excl_locked = WRITE_LOCK;\
else\
/* this must only be called with a WRITE or boosted SHARED lock! */
#define ConvertWToSLock(lock)\
BEGINMAC\
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDOWN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)SHARED_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKDOWN, lock, SHARED_LOCK);\
(lock)->excl_locked = SHARED_LOCK; \
if((lock)->wait_states) \
Afs_Lock_ReleaseR(lock); \
#define ConvertWToRLock(lock) \
BEGINMAC\
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDOWN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKDOWN, lock, READ_LOCK);\
(lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\
((lock)->readers_reading)++;\
(lock)->pid_last_reader = MyPidxx ; \
#define ConvertSToRLock(lock) \
BEGINMAC\
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDOWN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKDOWN, lock, READ_LOCK);\
(lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\
((lock)->readers_reading)++;\
(lock)->pid_last_reader = MyPidxx ; \
#define ReleaseReadLock(lock)\
BEGINMAC\
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDONE, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKDONE, lock, READ_LOCK);\
if (!(--((lock)->readers_reading)) && (lock)->wait_states)\
Afs_Lock_ReleaseW(lock) ; \
if ( (lock)->pid_last_reader == MyPidxx ) \
#define ReleaseWriteLock(lock)\
BEGINMAC\
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDONE, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)WRITE_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKDONE, lock, WRITE_LOCK);\
(lock)->excl_locked &= ~WRITE_LOCK;\
if ((lock)->wait_states) Afs_Lock_ReleaseR(lock);\
(lock)->pid_writer=0; \
/* can be used on shared or boosted (write) locks */
#define ReleaseSharedLock(lock)\
BEGINMAC\
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDONE, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)SHARED_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKDONE, lock, SHARED_LOCK);\
(lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\
if ((lock)->wait_states) Afs_Lock_ReleaseR(lock);\
(lock)->pid_writer=0; \
#define ObtainReadLock(lock)\
BEGINMAC \
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, READ_LOCK);\
if (!((lock)->excl_locked & WRITE_LOCK)) \
((lock)->readers_reading)++; \
else \
#define ObtainWriteLock(lock, src)\
BEGINMAC \
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)WRITE_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, WRITE_LOCK);\
if (!(lock)->excl_locked && !(lock)->readers_reading)\
(lock) -> excl_locked = WRITE_LOCK;\
else\
#define ObtainSharedLock(lock, src)\
BEGINMAC \
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)SHARED_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, SHARED_LOCK);\
if (!(lock)->excl_locked)\
(lock) -> excl_locked = SHARED_LOCK;\
else\
#define UpgradeSToWLock(lock, src)\
BEGINMAC \
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKOBTAIN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)BOOSTED_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKOBTAIN, lock, BOOSTED_LOCK);\
if (!(lock)->readers_reading)\
(lock)->excl_locked = WRITE_LOCK;\
else\
/* this must only be called with a WRITE or boosted SHARED lock! */
#define ConvertWToSLock(lock)\
BEGINMAC\
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDOWN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)SHARED_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKDOWN, lock, SHARED_LOCK);\
(lock)->excl_locked = SHARED_LOCK; \
if((lock)->wait_states) \
Afs_Lock_ReleaseR(lock); \
#define ConvertWToRLock(lock) \
BEGINMAC\
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDOWN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKDOWN, lock, READ_LOCK);\
(lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\
((lock)->readers_reading)++;\
Afs_Lock_ReleaseR(lock);\
#define ConvertSToRLock(lock) \
BEGINMAC\
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDOWN, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKDOWN, lock, READ_LOCK);\
(lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\
((lock)->readers_reading)++;\
Afs_Lock_ReleaseR(lock);\
#define ReleaseReadLock(lock)\
BEGINMAC\
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDONE, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)READ_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKDONE, lock, READ_LOCK);\
if (!(--((lock)->readers_reading)) && (lock)->wait_states)\
Afs_Lock_ReleaseW(lock) ; \
ENDMAC
#define ReleaseWriteLock(lock)\
BEGINMAC\
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDONE, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)WRITE_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKDONE, lock, WRITE_LOCK);\
(lock)->excl_locked &= ~WRITE_LOCK;\
if ((lock)->wait_states) Afs_Lock_ReleaseR(lock);\
ENDMAC
/* can be used on shared or boosted (write) locks */
#define ReleaseSharedLock(lock)\
BEGINMAC\
-/* if (afs_trclock) {icl_Trace2(cm_iclSetp, CM_TRACE_LOCKDONE, ICL_TYPE_POINTER, (long)lock, ICL_TYPE_LONG, (long)SHARED_LOCK);} */ \
+ AFS_LOCK_TRACE(CM_TRACE_LOCKDONE, lock, SHARED_LOCK);\
(lock)->excl_locked &= ~(SHARED_LOCK | WRITE_LOCK);\
if ((lock)->wait_states) Afs_Lock_ReleaseR(lock);\
ENDMAC