Changeset 7030dab for libcfa/src/bits/locks.hfa
- Timestamp:
- Apr 6, 2020, 4:46:28 PM (6 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum, stuck-waitfor-destruct
- Children:
- e3bc51c
- Parents:
- 71d6bd8 (diff), 057298e (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - File:
-
- 1 edited
-
libcfa/src/bits/locks.hfa (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/bits/locks.hfa
r71d6bd8 r7030dab 10 10 // Created On : Tue Oct 31 15:14:38 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Aug 11 15:42:24 201813 // Update Count : 1 012 // Last Modified On : Tue Feb 4 13:03:19 2020 13 // Update Count : 11 14 14 // 15 15 … … 54 54 55 55 #ifdef __CFA_DEBUG__ 56 void __cfaabi_dbg_record (__spinlock_t & this, const char * prev_name);56 void __cfaabi_dbg_record_lock(__spinlock_t & this, const char prev_name[]); 57 57 #else 58 #define __cfaabi_dbg_record (x, y)58 #define __cfaabi_dbg_record_lock(x, y) 59 59 #endif 60 60 } 61 62 extern void yield( unsigned int );63 61 64 62 static inline void ?{}( __spinlock_t & this ) { … … 68 66 // Lock the spinlock, return false if already acquired 69 67 static inline bool try_lock ( __spinlock_t & this __cfaabi_dbg_ctx_param2 ) { 68 disable_interrupts(); 70 69 bool result = (this.lock == 0) && (__atomic_test_and_set( &this.lock, __ATOMIC_ACQUIRE ) == 0); 71 70 if( result ) { 72 disable_interrupts(); 73 __cfaabi_dbg_record( this, caller ); 71 __cfaabi_dbg_record_lock( this, caller ); 72 } else { 73 enable_interrupts_noPoll(); 74 74 } 75 75 return result; … … 83 83 #endif 84 84 85 disable_interrupts(); 85 86 for ( unsigned int i = 1;; i += 1 ) { 86 87 if ( (this.lock == 0) && (__atomic_test_and_set( &this.lock, __ATOMIC_ACQUIRE ) == 0) ) break; … … 98 99 #endif 99 100 } 100 disable_interrupts(); 101 __cfaabi_dbg_record( this, caller ); 101 __cfaabi_dbg_record_lock( this, caller ); 102 102 } 103 103 104 104 static inline void unlock( __spinlock_t & this ) { 105 __atomic_clear( &this.lock, __ATOMIC_RELEASE ); 105 106 enable_interrupts_noPoll(); 106 __atomic_clear( &this.lock, __ATOMIC_RELEASE );107 107 } 108 108 … … 139 139 } 140 140 141 static inline void post(__bin_sem_t & this) with( this ) { 142 verify(__cfaabi_dbg_in_kernel()); 143 141 static inline bool post(__bin_sem_t & this) with( this ) { 144 142 pthread_mutex_lock(&lock); 145 143 bool needs_signal = !signaled; … … 147 145 pthread_mutex_unlock(&lock); 148 146 149 if (needs_signal) 150 pthread_cond_signal(&cond); 147 if (needs_signal) pthread_cond_signal(&cond); 148 149 return needs_signal; 151 150 } 152 151 #endif
Note:
See TracChangeset
for help on using the changeset viewer.