Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/coroutine.hfa

    r212c2187 r76d3ca6  
    7777        // will also migrate which means this value will
    7878        // stay in syn with the TLS
    79         coroutine_desc * src = TL_GET( this_thread )->curr_cor;
     79        coroutine_desc * src = TL_GET( this_coroutine );
    8080
    8181        assertf( src->last != 0,
     
    9999        // will also migrate which means this value will
    100100        // stay in syn with the TLS
    101         coroutine_desc * src = TL_GET( this_thread )->curr_cor;
     101        coroutine_desc * src = TL_GET( this_coroutine );
    102102        coroutine_desc * dst = get_coroutine(cor);
    103103
     
    129129        // will also migrate which means this value will
    130130        // stay in syn with the TLS
    131         coroutine_desc * src = TL_GET( this_thread )->curr_cor;
     131        coroutine_desc * src = TL_GET( this_coroutine );
    132132
    133133        // not resuming self ?
     
    146146}
    147147
    148 
    149 
    150 // static inline bool suspend_checkpoint(void) {
    151 //      // optimization : read TLS once and reuse it
    152 //      // Safety note: this is preemption safe since if
    153 //      // preemption occurs after this line, the pointer
    154 //      // will also migrate which means this value will
    155 //      // stay in syn with the TLS
    156 //      // set state of current coroutine to inactive
    157 //       this->state = Checkpoint;
    158 
    159 //       // context switch to specified coroutine
    160 //       assert( src->stack.context );
    161 
    162 //       CtxStore(src->stack.context);
    163 
    164 //      bool ret = this->state == Checkpoint;
    165 
    166 //       // set state of new coroutine to active
    167 //       src->state = Active;
    168 
    169 //       enable_interrupts( __cfaabi_dbg_ctx );
    170 //       // Safety note : This could cause some false positives due to preemption
    171 //       verify( TL_GET( preemption_state.enabled ) || TL_GET( this_processor )->do_terminate );
    172 
    173 //       if( unlikely(src->cancellation != NULL) ) {
    174 //             _CtxCoroutine_Unwind(src->cancellation);
    175 //       }
    176 
    177 //      return ret;
    178 // }
    179 
    180 // static inline void suspend_return(void) {
    181 //      // optimization : read TLS once and reuse it
    182 //      // Safety note: this is preemption safe since if
    183 //      // preemption occurs after this line, the pointer
    184 //      // will also migrate which means this value will
    185 //      // stay in syn with the TLS
    186 //      coroutine_desc * src = TL_GET( this_thread )->curr_cor;
    187 
    188 //      assertf( src->last != 0,
    189 //              "Attempt to suspend coroutine \"%.256s\" (%p) that has never been resumed.\n"
    190 //              "Possible cause is a suspend executed in a member called by a coroutine user rather than by the coroutine main.",
    191 //              src->name, src );
    192 //      assertf( src->last->state != Halted,
    193 //              "Attempt by coroutine \"%.256s\" (%p) to suspend back to terminated coroutine \"%.256s\" (%p).\n"
    194 //              "Possible cause is terminated coroutine's main routine has already returned.",
    195 //              src->name, src, src->last->name, src->last );
    196 
    197 //      // Safety note : Preemption must be disabled here since kernelTLS.this_coroutine must always be up to date
    198 //       verify( TL_GET( preemption_state.enabled ) || TL_GET( this_processor )->do_terminate );
    199 //       disable_interrupts();
    200 
    201 //       // set state of current coroutine to inactive
    202 //       src->state = src->state == Halted ? Halted : Inactive;
    203 
    204 //       // set new coroutine that task is executing
    205 //       kernelTLS.this_coroutine = dst;
    206 
    207 //       // context switch to specified coroutine
    208 //       assert( src->stack.context );
    209 //      CtxRet( src->stack.context );
    210 
    211 //      abort();
    212 // }
    213 
    214148// Local Variables: //
    215149// mode: c //
Note: See TracChangeset for help on using the changeset viewer.