Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/kernel/startup.cfa

    r145dcd5 r1757f98  
    3434#include "kernel_private.hfa"
    3535#include "startup.hfa"          // STARTUP_PRIORITY_XXX
    36 #include "limits.hfa"
    3736#include "math.hfa"
    3837
     
    280279        // When its coroutine terminates, it return control to the mainThread
    281280        // which is currently here
    282         /* paranoid */ verify( !__atomic_load_n(&mainProcessor->do_terminate, __ATOMIC_ACQUIRE) );
    283281        __atomic_store_n(&mainProcessor->do_terminate, true, __ATOMIC_RELEASE);
    284         __wake_proc( mainProcessor );
    285282        __kernel_last_resume( __cfaabi_tls.this_processor );
    286283        mainThread->self_cor.state = Halted;
     
    406403
    407404        __cfaabi_tls.this_thread->curr_cor = dst;
    408         __stack_prepare( &dst->stack, DEFAULT_STACK_SIZE );
     405        __stack_prepare( &dst->stack, 65000 );
    409406        __cfactx_start(main, dst, this->runner, __cfactx_invoke_coroutine);
    410407
     
    514511        this.rdq.its = 0;
    515512        this.rdq.itr = 0;
    516         this.rdq.id  = MAX;
    517         this.rdq.target = MAX;
    518         this.rdq.last = MAX;
    519         this.rdq.cpu = 0;
    520         // this.rdq.cutoff = 0ull;
     513        this.rdq.id  = -1u;
     514        this.rdq.target = -1u;
     515        this.rdq.last = -1u;
     516        this.rdq.cutoff = 0ull;
    521517        do_terminate = false;
    522518        preemption_alarm = 0p;
     
    568564extern size_t __page_size;
    569565void ^?{}(processor & this) with( this ){
    570         /* paranoid */ verify( !__atomic_load_n(&do_terminate, __ATOMIC_ACQUIRE) );
    571         __cfadbg_print_safe(runtime_core, "Kernel : core %p signaling termination\n", &this);
    572 
    573         __atomic_store_n(&do_terminate, true, __ATOMIC_RELAXED);
    574         __disable_interrupts_checked();
     566        if( ! __atomic_load_n(&do_terminate, __ATOMIC_ACQUIRE) ) {
     567                __cfadbg_print_safe(runtime_core, "Kernel : core %p signaling termination\n", &this);
     568
     569                __atomic_store_n(&do_terminate, true, __ATOMIC_RELAXED);
    575570                __wake_proc( &this );
    576         __enable_interrupts_checked();
    577 
    578         wait( terminated );
    579         /* paranoid */ verify( active_processor() != &this);
     571
     572                wait( terminated );
     573                /* paranoid */ verify( active_processor() != &this);
     574        }
    580575
    581576        __destroy_pthread( kernel_thread, this.stack, 0p );
     
    687682        [this->unique_id, last_size] = ready_mutate_register();
    688683
    689                 this->rdq.cpu = __kernel_getcpu();
    690 
    691684                this->cltr->procs.total += 1u;
    692685                insert_last(this->cltr->procs.actives, *this);
     
    728721        check( pthread_attr_init( &attr ), "pthread_attr_init" ); // initialize attribute
    729722
    730         size_t stacksize = DEFAULT_STACK_SIZE;
     723        size_t stacksize;
     724        // default stack size, normally defined by shell limit
     725        check( pthread_attr_getstacksize( &attr, &stacksize ), "pthread_attr_getstacksize" );
     726        assert( stacksize >= PTHREAD_STACK_MIN );
    731727
    732728        void * stack;
     
    753749        #endif
    754750
     751
    755752        check( pthread_attr_setstack( &attr, stack, stacksize ), "pthread_attr_setstack" );
     753
    756754        check( pthread_create( pthread, &attr, start, arg ), "pthread_create" );
    757755        return stack;
Note: See TracChangeset for help on using the changeset viewer.