- Timestamp:
- May 22, 2018, 2:43:09 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, with_gc
- Children:
- a1a17a74
- Parents:
- cac8a6e
- Location:
- src/libcfa
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/bits/containers.h
rcac8a6e r639991a 220 220 } 221 221 222 #define _next .0223 #define _prev .1222 #define next 0 223 #define prev 1 224 224 forall(dtype T | sized(T)) 225 225 static inline void push_front( __dllist(T) & this, T & node ) with( this ) { 226 226 if ( head ) { 227 __get( node ) _next = head;228 __get( node ) _prev = __get( *head )_prev;227 __get( node ).next = head; 228 __get( node ).prev = __get( *head ).prev; 229 229 // inserted node must be consistent before it is seen 230 230 // prevent code movement across barrier 231 231 asm( "" : : : "memory" ); 232 __get( *head ) _prev = &node;233 T & prev = *__get( node )_prev;234 __get( prev )_next = &node;232 __get( *head ).prev = &node; 233 T & _prev = *__get( node ).prev; 234 __get( _prev ).next = &node; 235 235 } 236 236 else { 237 __get( node ) _next = &node;238 __get( node ) _prev = &node;237 __get( node ).next = &node; 238 __get( node ).prev = &node; 239 239 } 240 240 … … 247 247 static inline void remove( __dllist(T) & this, T & node ) with( this ) { 248 248 if ( &node == head ) { 249 if ( __get( *head ) _next == head ) {249 if ( __get( *head ).next == head ) { 250 250 head = NULL; 251 251 } 252 252 else { 253 head = __get( *head ) _next;253 head = __get( *head ).next; 254 254 } 255 255 } 256 __get( *__get( node ) _next )_prev = __get( node )_prev;257 __get( *__get( node ) _prev )_next = __get( node )_next;258 __get( node ) _next = NULL;259 __get( node ) _prev = NULL;260 } 261 #undef _next262 #undef _prev256 __get( *__get( node ).next ).prev = __get( node ).prev; 257 __get( *__get( node ).prev ).next = __get( node ).next; 258 __get( node ).next = NULL; 259 __get( node ).prev = NULL; 260 } 261 #undef next 262 #undef prev 263 263 #endif 264 264 -
src/libcfa/concurrency/kernel.c
rcac8a6e r639991a 54 54 //----------------------------------------------------------------------------- 55 55 // Global state 56 57 // volatile thread_local bool preemption_in_progress = 0;58 // volatile thread_local bool preemption_enabled = false;59 // volatile thread_local unsigned short disable_preempt_count = 1;60 61 56 thread_local struct KernelThreadData kernelTLS = { 62 57 NULL, … … 697 692 else { 698 693 int len = snprintf( abort_text, abort_text_size, "Error occurred outside of any thread.\n" ); 694 __cfaabi_dbg_bits_write( abort_text, len ); 699 695 } 700 696 } … … 761 757 // Global Queues 762 758 void doregister( thread_desc & thrd ) { 763 // lock ( global_thread.lock);764 // push_front( global_thread.list, thrd );765 // unlock ( global_thread.lock );759 lock ( global_threads.lock __cfaabi_dbg_ctx2); 760 push_front( global_threads.list, thrd ); 761 unlock ( global_threads.lock ); 766 762 } 767 763 768 764 void unregister( thread_desc & thrd ) { 769 // lock ( global_thread.lock);770 // remove( global_thread.list, thrd );771 // unlock( global_thread.lock );765 lock ( global_threads.lock __cfaabi_dbg_ctx2); 766 remove( global_threads.list, thrd ); 767 unlock( global_threads.lock ); 772 768 } 773 769 774 770 void doregister( cluster & cltr ) { 775 // lock ( global_cluster.lock);776 // push_front( global_cluster.list, cltr );777 // unlock ( global_cluster.lock );771 lock ( global_clusters.lock __cfaabi_dbg_ctx2); 772 push_front( global_clusters.list, cltr ); 773 unlock ( global_clusters.lock ); 778 774 } 779 775 780 776 void unregister( cluster & cltr ) { 781 // lock ( global_cluster.lock);782 // remove( global_cluster.list, cltr );783 // unlock( global_cluster.lock );777 lock ( global_clusters.lock __cfaabi_dbg_ctx2); 778 remove( global_clusters.list, cltr ); 779 unlock( global_clusters.lock ); 784 780 } 785 781 786 782 787 783 void doregister( cluster * cltr, processor * proc ) { 788 //lock (cltr->proc_list_lock __cfaabi_dbg_ctx2);789 //push_front(cltr->procs, *proc);790 //unlock (cltr->proc_list_lock);784 lock (cltr->proc_list_lock __cfaabi_dbg_ctx2); 785 push_front(cltr->procs, *proc); 786 unlock (cltr->proc_list_lock); 791 787 } 792 788 793 789 void unregister( cluster * cltr, processor * proc ) { 794 //lock (cltr->proc_list_lock __cfaabi_dbg_ctx2);795 //remove(cltr->procs, *proc );796 //unlock(cltr->proc_list_lock);790 lock (cltr->proc_list_lock __cfaabi_dbg_ctx2); 791 remove(cltr->procs, *proc ); 792 unlock(cltr->proc_list_lock); 797 793 } 798 794
Note: See TracChangeset
for help on using the changeset viewer.