- Timestamp:
- Jun 8, 2022, 4:22:24 PM (2 years ago)
- Branches:
- ADT, ast-experimental, master, pthread-emulation, qualifiedEnum
- Children:
- ae06e0b
- Parents:
- e5d9274
- Location:
- libcfa/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/bits/locks.hfa
re5d9274 rced5e2a 26 26 // Wrap in struct to prevent false sharing with debug info 27 27 volatile bool lock; 28 #ifdef __CFA_DEBUG__29 // previous function to acquire the lock30 const char * prev_name;31 // previous thread to acquire the lock32 void* prev_thrd;33 // keep track of number of times we had to spin, just in case the number is unexpectedly huge34 size_t spin_count;35 #endif36 28 }; 37 29 … … 40 32 extern void disable_interrupts() OPTIONAL_THREAD; 41 33 extern void enable_interrupts( bool poll = true ) OPTIONAL_THREAD; 42 43 #ifdef __CFA_DEBUG__ 44 void __cfaabi_dbg_record_lock(__spinlock_t & this, const char prev_name[]); 45 #else 46 #define __cfaabi_dbg_record_lock(x, y) 47 #endif 34 #define __cfaabi_dbg_record_lock(x, y) 48 35 } 49 36 50 37 static inline void ?{}( __spinlock_t & this ) { 51 38 this.lock = 0; 52 #ifdef __CFA_DEBUG__53 this.spin_count = 0;54 #endif55 39 } 56 40 … … 77 61 for ( unsigned int i = 1;; i += 1 ) { 78 62 if ( (this.lock == 0) && (__atomic_test_and_set( &this.lock, __ATOMIC_ACQUIRE ) == 0) ) break; 79 #ifdef __CFA_DEBUG__80 this.spin_count++;81 #endif82 63 #ifndef NOEXPBACK 83 64 // exponential spin -
libcfa/src/concurrency/kernel.cfa
re5d9274 rced5e2a 834 834 #endif 835 835 836 837 838 //-----------------------------------------------------------------------------839 // Debug840 __cfaabi_dbg_debug_do(841 extern "C" {842 void __cfaabi_dbg_record_lock(__spinlock_t & this, const char prev_name[]) {843 this.prev_name = prev_name;844 this.prev_thrd = kernelTLS().this_thread;845 }846 }847 )848 849 836 //----------------------------------------------------------------------------- 850 837 // Debug -
libcfa/src/startup.cfa
re5d9274 rced5e2a 63 63 64 64 struct __spinlock_t; 65 extern "C" {66 void __cfaabi_dbg_record_lock(struct __spinlock_t & this, const char prev_name[]) __attribute__(( weak )) libcfa_public {}67 }68 65 69 66 // Local Variables: //
Note: See TracChangeset
for help on using the changeset viewer.