#include #include #include #include #include void altproc(void *arg) { Mousectl *mctl; Alt a[3]; int i; mctl = arg; a[0].c = mctl->c; a[0].v = nil; a[0].op = CHANRCV; a[1].c = mctl->resizec; a[1].v = nil; a[1].op = CHANRCV; a[2].op = CHANEND; for(;;) { switch(i = alt(a)) { case 0: case 1: print("a[%d]\n", i); if(chanclosing(a[i].c) == 0) { print("a[%d].c closed\n", i); continue; } break; default: print("altproc exiting\n"); threadexits(nil); } } } void threadmain(int, char **) { Mousectl *mctl; if((mctl = initmouse(nil, nil)) == nil) sysfatal("initmouse: %r"); threadcreate(altproc, mctl, 1024); print("closing mctl\n"); closemouse(mctl); print("closed mctl\n"); print("threadmain exiting\n"); threadexits(nil); }