|  | #include <u.h> | 
|  | #include <libc.h> | 
|  | #include <fcall.h> | 
|  | #include <thread.h> | 
|  | #include <9p.h> | 
|  |  | 
|  | static void | 
|  | launchsrv(void *v) | 
|  | { | 
|  | srv(v); | 
|  | } | 
|  |  | 
|  | void | 
|  | threadpostmountsrv(Srv *s, char *name, char *mtpt, int flag) | 
|  | { | 
|  | int fd[2]; | 
|  |  | 
|  | if(!s->nopipe){ | 
|  | if(pipe(fd) < 0) | 
|  | sysfatal("pipe: %r"); | 
|  | s->infd = s->outfd = fd[1]; | 
|  | s->srvfd = fd[0]; | 
|  | } | 
|  | if(name || mtpt){ | 
|  | if(post9pservice(s->srvfd, name, mtpt) < 0) | 
|  | sysfatal("post9pservice %s: %r", name); | 
|  | }else if(!s->nopipe) | 
|  | sysfatal("no one to serve"); | 
|  | if(s->foreground) | 
|  | srv(s); | 
|  | else | 
|  | proccreate(launchsrv, s, 32*1024); | 
|  | } |