Changes in libcfa/src/concurrency/invoke.h [1f45c7d:e84ab3d]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/invoke.h
r1f45c7d re84ab3d 71 71 enum __Coroutine_State { Halted, Start, Primed, Blocked, Ready, Active, Cancelled, Halting }; 72 72 73 struct $coroutine{73 struct coroutine$ { 74 74 // context that is switch during a __cfactx_switch 75 75 struct __stack_context_t context; … … 85 85 86 86 // first coroutine to resume this one 87 struct $coroutine* starter;87 struct coroutine$ * starter; 88 88 89 89 // last coroutine to resume this one 90 struct $coroutine* last;90 struct coroutine$ * last; 91 91 92 92 // If non-null stack must be unwound with this exception … … 95 95 }; 96 96 // Wrapper for gdb 97 struct cfathread_coroutine_t { struct $coroutinedebug; };98 99 static inline struct __stack_t * __get_stack( struct $coroutine* cor ) {97 struct cfathread_coroutine_t { struct coroutine$ debug; }; 98 99 static inline struct __stack_t * __get_stack( struct coroutine$ * cor ) { 100 100 return (struct __stack_t*)(((uintptr_t)cor->stack.storage) & ((uintptr_t)-2)); 101 101 } … … 110 110 }; 111 111 112 struct $monitor{112 struct monitor$ { 113 113 // spinlock to protect internal data 114 114 struct __spinlock_t lock; 115 115 116 116 // current owner of the monitor 117 struct $thread* owner;117 struct thread$ * owner; 118 118 119 119 // queue of threads that are blocked waiting for the monitor 120 __queue_t(struct $thread) entry_queue;120 __queue_t(struct thread$) entry_queue; 121 121 122 122 // stack of conditions to run next once we exit the monitor … … 133 133 }; 134 134 // Wrapper for gdb 135 struct cfathread_monitor_t { struct $monitordebug; };135 struct cfathread_monitor_t { struct monitor$ debug; }; 136 136 137 137 struct __monitor_group_t { 138 138 // currently held monitors 139 __cfa_anonymous_object( __small_array_t( $monitor*) );139 __cfa_anonymous_object( __small_array_t(monitor$*) ); 140 140 141 141 // last function that acquired monitors … … 146 146 // instrusive link field for threads 147 147 struct __thread_desc_link { 148 struct $thread* next;148 struct thread$ * next; 149 149 volatile unsigned long long ts; 150 150 }; 151 151 152 struct $thread{152 struct thread$ { 153 153 // Core threading fields 154 154 // context that is switch during a __cfactx_switch … … 170 170 bool corctx_flag; 171 171 172 int last_cpu;173 174 172 //SKULLDUGGERY errno is not save in the thread data structure because returnToKernel appears to be the only function to require saving and restoring it 175 173 … … 181 179 182 180 // coroutine body used to store context 183 struct $coroutineself_cor;181 struct coroutine$ self_cor; 184 182 185 183 // current active context 186 struct $coroutine* curr_cor;184 struct coroutine$ * curr_cor; 187 185 188 186 // monitor body used for mutual exclusion 189 struct $monitorself_mon;187 struct monitor$ self_mon; 190 188 191 189 // pointer to monitor with sufficient lifetime for current monitors 192 struct $monitor* self_mon_p;190 struct monitor$ * self_mon_p; 193 191 194 192 // monitors currently held by this thread … … 197 195 // used to put threads on user data structures 198 196 struct { 199 struct $thread* next;200 struct $thread* back;197 struct thread$ * next; 198 struct thread$ * back; 201 199 } seqable; 202 200 203 201 // used to put threads on dlist data structure 204 __cfa_dlink( $thread);202 __cfa_dlink(thread$); 205 203 206 204 struct { 207 struct $thread* next;208 struct $thread* prev;205 struct thread$ * next; 206 struct thread$ * prev; 209 207 } node; 210 208 … … 216 214 }; 217 215 #ifdef __cforall 218 P9_EMBEDDED( $thread, dlink($thread) )216 P9_EMBEDDED( thread$, dlink(thread$) ) 219 217 #endif 220 218 // Wrapper for gdb 221 struct cfathread_thread_t { struct $threaddebug; };219 struct cfathread_thread_t { struct thread$ debug; }; 222 220 223 221 #ifdef __CFA_DEBUG__ 224 void __cfaabi_dbg_record_thrd( $thread& this, bool park, const char prev_name[]);222 void __cfaabi_dbg_record_thrd(thread$ & this, bool park, const char prev_name[]); 225 223 #else 226 224 #define __cfaabi_dbg_record_thrd(x, y, z) … … 230 228 extern "Cforall" { 231 229 232 static inline $thread *& get_next( $thread& this ) __attribute__((const)) {230 static inline thread$ *& get_next( thread$ & this ) __attribute__((const)) { 233 231 return this.link.next; 234 232 } 235 233 236 static inline [ $thread *&, $thread *& ] __get( $thread& this ) __attribute__((const)) {234 static inline [thread$ *&, thread$ *& ] __get( thread$ & this ) __attribute__((const)) { 237 235 return this.node.[next, prev]; 238 236 } 239 237 240 static inline $thread * volatile & ?`next ( $thread* this ) __attribute__((const)) {238 static inline thread$ * volatile & ?`next ( thread$ * this ) __attribute__((const)) { 241 239 return this->seqable.next; 242 240 } 243 241 244 static inline $thread *& Back( $thread* this ) __attribute__((const)) {242 static inline thread$ *& Back( thread$ * this ) __attribute__((const)) { 245 243 return this->seqable.back; 246 244 } 247 245 248 static inline $thread *& Next( $thread* this ) __attribute__((const)) {246 static inline thread$ *& Next( thread$ * this ) __attribute__((const)) { 249 247 return this->seqable.next; 250 248 } 251 249 252 static inline bool listed( $thread* this ) {250 static inline bool listed( thread$ * this ) { 253 251 return this->seqable.next != 0p; 254 252 } … … 260 258 } 261 259 262 static inline void ?{}(__monitor_group_t & this, struct $monitor** data, __lock_size_t size, fptr_t func) {260 static inline void ?{}(__monitor_group_t & this, struct monitor$ ** data, __lock_size_t size, fptr_t func) { 263 261 (this.data){data}; 264 262 (this.size){size};
Note: See TracChangeset
for help on using the changeset viewer.