コード例 #1
0
ファイル: coroutine-win32.c プロジェクト: 0bliv10n/s2e
static void CALLBACK coroutine_trampoline(void *co_)
{
    Coroutine *co = co_;

    while (true) {
        co->entry(co->entry_arg);
        qemu_coroutine_switch(co, co->caller, COROUTINE_TERMINATE);
    }
}
コード例 #2
0
static void coroutine_trampoline(int i0, int i1)
{
    union cc_arg arg;
    CoroutineUContext *self;
    Coroutine *co;

    arg.i[0] = i0;
    arg.i[1] = i1;
    self = arg.p;
    co = &self->base;

    /* Initialize longjmp environment and switch back the caller */
    if (!sigsetjmp(self->env, 0)) {
        siglongjmp(*(sigjmp_buf *)co->entry_arg, 1);
    }

    while (true) {
        co->entry(co->entry_arg);
        qemu_coroutine_switch(co, co->caller, COROUTINE_TERMINATE);
    }
}
コード例 #3
0
ファイル: coroutine.cpp プロジェクト: miviwi/DD
void Coroutine::setupEntry()
{
  Coroutine *current = (Coroutine *)sys().getContextOfCoroutine(sys().activeCoroutine());
  current->entry();
}