the threads and procs that are created by libthread have ther stacks malloc()ed, so one thread can allocate a structure or buffer on its stack and pass a pointer to another thread or proc. when you would do a rfork(RFMEM) in a libthread program, the stacks would have been shared by parent and child! libthread does some setjmp/longjmp magic to switch the stack to the original plan9 stack segment to be able todo a real rfork when spawning new procs. also linux clone syscall takes a pointer to the routine running in a new "thread" for a similar reason. they dont have the concept of a always copy-on-write stack. -- cinap