Changeset b462670


Ignore:
Timestamp:
Sep 20, 2017, 1:59:47 PM (7 years ago)
Author:
Thierry Delisle <tdelisle@…>
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, resolv-new, with_gc
Children:
8d722cc, 9bae71f
Parents:
47b5b63
Message:

Coroutines should now properly use the first resumner as their starter

Location:
src/libcfa/concurrency
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/libcfa/concurrency/coroutine

    r47b5b63 rb462670  
    103103                // set last resumer
    104104                dst->last = src;
     105                dst->starter = dst->starter ? dst->starter : src;
    105106        } // if
    106107
  • src/libcfa/concurrency/coroutine.c

    r47b5b63 rb462670  
    6565        this.errno_ = 0;
    6666        this.state = Start;
    67         this.starter = this_coroutine;
     67        this.starter = NULL;
    6868        this.last = NULL;
    6969}
     
    176176
    177177                assertf( src->starter != 0,
    178                         "Attempt to suspend coroutine \"%.256s\" (%p) that does not have a starter.\n"
    179                         "Possible cause is a resume of a coroutine already destroyed or not yet constructed",
     178                        "Attempt to suspend/leave coroutine \"%.256s\" (%p) that has never been resumed.\n"
     179                        "Possible cause is a suspend executed in a member called by a coroutine user rather than by the coroutine main.",
    180180                        src->name, src );
    181181                assertf( src->starter->state != Halted,
    182                         "Attempt by coroutine \"%.256s\" (%p) to suspend back to terminated coroutine \"%.256s\" (%p).\n"
     182                        "Attempt by coroutine \"%.256s\" (%p) to suspend/leave back to terminated coroutine \"%.256s\" (%p).\n"
    183183                        "Possible cause is terminated coroutine's main routine has already returned.",
    184184                        src->name, src, src->starter->name, src->starter );
  • src/libcfa/concurrency/kernel.c

    r47b5b63 rb462670  
    115115void ?{}(processorCtx_t & this, processor * proc) {
    116116        (this.__cor){ "Processor" };
    117         this.__cor.starter = &mainThread->cor;
     117        this.__cor.starter = NULL;
    118118        this.proc = proc;
    119119        proc->runner = &this;
Note: See TracChangeset for help on using the changeset viewer.