/* This is used as the signal handler. This is called with the brand new stack (thanks to sigaltstack). We have to return, given that this is a signal handler and the sigmask and some other things are changed.  */
static void coroutine_trampoline(int signal)
/* This is used as the signal handler. This is called with the brand new stack (thanks to sigaltstack). We have to return, given that this is a signal handler and the sigmask and some other things are changed.  */
static void coroutine_trampoline(int signal)
{
    CoroutineUContext *self;
    Coroutine *co;
    CoroutineThreadState *coTS;
    coTS = coroutine_get_thread_state();
    self = coTS->tr_handler;
    coTS->tr_called = 1;
    co = &self->base;
    if (!sigsetjmp(coTS->tr_reenter, 0)) {
        return;
    }
    coroutine_bootstrap(self, co);
}