Changeset dddb3dd0 for libcfa/src/concurrency/kernel/startup.cfa
- Timestamp:
- Mar 2, 2021, 1:58:12 PM (4 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 2cd784a
- Parents:
- 6047b00
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/kernel/startup.cfa
r6047b00 rdddb3dd0 22 22 extern "C" { 23 23 #include <limits.h> // PTHREAD_STACK_MIN 24 #include <sys/eventfd.h> // eventfd 24 25 #include <sys/mman.h> // mprotect 25 26 #include <sys/resource.h> // getrlimit … … 80 81 static void ?{}(processorCtx_t & this) {} 81 82 static void ?{}(processorCtx_t & this, processor * proc, current_stack_info_t * info); 82 static void ?{}(__bin_sem_t & this);83 static void ^?{}(__bin_sem_t & this);84 83 85 84 #if defined(__CFA_WITH_VERIFY__) … … 91 90 extern void __kernel_alarm_startup(void); 92 91 extern void __kernel_alarm_shutdown(void); 93 extern void __kernel_io_startup (void);94 extern void __kernel_io_shutdown(void);95 92 96 93 //----------------------------------------------------------------------------- … … 104 101 KERNEL_STORAGE($thread, mainThread); 105 102 KERNEL_STORAGE(__stack_t, mainThreadCtx); 106 KERNEL_STORAGE(io_context, mainIoContext);107 103 KERNEL_STORAGE(__scheduler_RWLock_t, __scheduler_lock); 108 104 #if !defined(__CFA_NO_STATISTICS__) … … 200 196 201 197 void ?{}(processor & this) with( this ) { 202 ( this.idle ){};203 198 ( this.terminated ){}; 204 199 ( this.runner ){}; … … 228 223 __kernel_alarm_startup(); 229 224 230 // Start IO231 __kernel_io_startup();232 233 io_context * mainio = (io_context *)&storage_mainIoContext;234 (*mainio){ *mainCluster };235 236 225 // Add the main thread to the ready queue 237 226 // once resume is called on mainProcessor->runner the mainThread needs to be scheduled like any normal thread … … 255 244 256 245 static void __kernel_shutdown(void) { 257 //Before we start shutting things down, wait for systems that need threading to shutdown258 io_context * mainio = (io_context *)&storage_mainIoContext;259 ^(*mainio){};260 261 246 /* paranoid */ verify( __preemption_enabled() ); 262 247 disable_interrupts(); … … 276 261 // Disable preemption 277 262 __kernel_alarm_shutdown(); 278 279 // Stop IO280 __kernel_io_shutdown();281 263 282 264 // Destroy the main processor and its context in reverse order of construction … … 479 461 480 462 this.io.ctx = 0p; 481 this.io.lock = false; 463 this.io.pending = false; 464 this.io.dirty = false; 465 466 this.idle = eventfd(0, 0); 467 if (idle < 0) { 468 abort("KERNEL ERROR: PROCESSOR EVENTFD - %s\n", strerror(errno)); 469 } 482 470 483 471 #if !defined(__CFA_NO_STATISTICS__) … … 521 509 // Finally we don't need the read_lock any more 522 510 unregister((__processor_id_t*)&this); 511 512 close(this.idle); 523 513 } 524 514 525 515 void ?{}(processor & this, const char name[], cluster & _cltr) { 526 ( this.idle ){};527 516 ( this.terminated ){}; 528 517 ( this.runner ){}; … … 726 715 } 727 716 728 extern "C" {729 char * strerror(int);730 }731 #define CHECKED(x) { int err = x; if( err != 0 ) abort("KERNEL ERROR: Operation \"" #x "\" return error %d - %s\n", err, strerror(err)); }732 733 static void ?{}(__bin_sem_t & this) with( this ) {734 // Create the mutex with error checking735 pthread_mutexattr_t mattr;736 pthread_mutexattr_init( &mattr );737 pthread_mutexattr_settype( &mattr, PTHREAD_MUTEX_ERRORCHECK_NP);738 pthread_mutex_init(&lock, &mattr);739 740 pthread_cond_init (&cond, (const pthread_condattr_t *)0p); // workaround trac#208: cast should not be required741 val = 0;742 }743 744 static void ^?{}(__bin_sem_t & this) with( this ) {745 CHECKED( pthread_mutex_destroy(&lock) );746 CHECKED( pthread_cond_destroy (&cond) );747 }748 749 #undef CHECKED750 751 717 #if defined(__CFA_WITH_VERIFY__) 752 718 static bool verify_fwd_bck_rng(void) {
Note: See TracChangeset
for help on using the changeset viewer.