int main(int argc, char **argv) { gr1 = greenlet_new(func1, NULL, 0); gr2 = greenlet_new(func2, NULL, 0); if ((gr1 == NULL) || (gr2 == NULL)) { fprintf(stderr, "error: could not allocate greenlets\n"); exit(1); } printf("entering greenlet 1\n"); if (greenlet_switch_to(gr1, NULL) == gr2) printf("back in main from: greenlet 2\n"); printf("greenlet 1 dead: %d\n", greenlet_isdead(gr1)); printf("greenlet 2 dead: %d\n", greenlet_isdead(gr2)); printf("re-entering greenlet 1\n"); if (greenlet_switch_to(gr1, NULL) == gr1) printf("back in main from: greenlet 1\n"); printf("greenlet 1 dead: %d\n", greenlet_isdead(gr1)); printf("greenlet 2 dead: %d\n", greenlet_isdead(gr2)); greenlet_destroy(gr1); greenlet_destroy(gr2); return 0; }
bool isdead(handle fiber) { #if __S3E__ return !IwFibreIsRunning((IwFibre*) fiber); #elif GREENLETS return greenlet_isdead((greenlet*) fiber) != 0; #else #endif }