From ee289c241577a3553bfd73211cd81e137ab4fe40 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sat, 1 May 2021 19:58:58 +0200 Subject: lib9p: remove Srv.srvfd, make postsrv() and threadpostsrv() return the mountable file descriptor, update documentation Now that we have these new functions, we can also make them return an error instead of calling sysfatal() like postmountsrv(). Remove the confusing Srv.srvfd, as it is only temporarily used and return it from postsrv() instead. --- sys/src/cmd/aux/wacom.c | 3 +-- sys/src/lib9p/listen.c | 2 +- sys/src/lib9p/mount.c | 11 +++++++---- sys/src/lib9p/post.c | 38 ++++++++++++++++++-------------------- sys/src/lib9p/share.c | 11 ++++++----- sys/src/lib9p/threadpostsrv.c | 4 ++-- 6 files changed, 35 insertions(+), 34 deletions(-) (limited to 'sys/src') diff --git a/sys/src/cmd/aux/wacom.c b/sys/src/cmd/aux/wacom.c index 5b076873c..876d4ab15 100644 --- a/sys/src/cmd/aux/wacom.c +++ b/sys/src/cmd/aux/wacom.c @@ -329,7 +329,6 @@ main() pipe(fd); tabletsrv.infd = tabletsrv.outfd = fd[0]; - tabletsrv.srvfd = fd[1]; tabletsrv.tree = alloctree(getuser(), getuser(), 0555, 0); tfile = createfile(tabletsrv.tree->root, "tablet", getuser(), 0400, 0); if(rfork(RFPROC | RFMEM | RFNOWAIT | RFNOTEG) > 0) exits(nil); @@ -349,4 +348,4 @@ main() sendout(m); msgdecref(m); } -} \ No newline at end of file +} diff --git a/sys/src/lib9p/listen.c b/sys/src/lib9p/listen.c index c7e8dd02c..b093bc287 100644 --- a/sys/src/lib9p/listen.c +++ b/sys/src/lib9p/listen.c @@ -18,7 +18,7 @@ listensrv(Srv *os, char *addr) *s = *os; s->addr = estrdup9p(addr); - s->infd = s->outfd = s->srvfd = -1; + s->infd = s->outfd = -1; s->fpool = nil; s->rpool = nil; s->msize = 0; diff --git a/sys/src/lib9p/mount.c b/sys/src/lib9p/mount.c index 1adc90bed..1ab41825c 100644 --- a/sys/src/lib9p/mount.c +++ b/sys/src/lib9p/mount.c @@ -8,12 +8,15 @@ void postmountsrv(Srv *s, char *name, char *mtpt, int flag) { - postsrv(s, name); + int sfd; + sfd = postsrv(s, name); + if(sfd < 0) + sysfatal("postsrv: %r"); if(mtpt != nil){ - if(amount(s->srvfd, mtpt, flag, "") == -1) + if(amount(sfd, mtpt, flag, "") == -1) sysfatal("mount %s: %r", mtpt); - /* mount closed s->srvfd */ + /* mount closed sfd */ } else - close(s->srvfd); + close(sfd); } diff --git a/sys/src/lib9p/post.c b/sys/src/lib9p/post.c index 18ded63ba..b2134968c 100644 --- a/sys/src/lib9p/post.c +++ b/sys/src/lib9p/post.c @@ -8,43 +8,41 @@ static void postproc(void *v) { Srv *s = v; - rendezvous(0, 0); - close(s->srvfd); + close((int)(uintptr)rendezvous(s, 0)); srv(s); } -void +int postsrv(Srv *s, char *name) { - char buf[80]; - int fd[2]; - int cfd; + int fd[2], cfd; if(pipe(fd) < 0) - sysfatal("pipe: %r"); - s->infd = s->outfd = fd[1]; - s->srvfd = fd[0]; - + return -1; if(name != nil){ + char buf[80]; + snprint(buf, sizeof buf, "/srv/%s", name); - if((cfd = create(buf, OWRITE|ORCLOSE|OCEXEC, 0600)) < 0) - sysfatal("create %s: %r", buf); - if(fprint(cfd, "%d", s->srvfd) < 0) - sysfatal("write %s: %r", buf); + if((cfd = create(buf, OWRITE|ORCLOSE|OCEXEC, 0600)) < 0 + || fprint(cfd, "%d", fd[0]) < 0){ + close(fd[0]); + fd[0] = -1; + goto Out; + } } else cfd = -1; + /* now we are commited */ + s->infd = s->outfd = fd[1]; if(s->forker == nil) s->forker = srvforker; (*s->forker)(postproc, s, RFNAMEG|RFNOTEG); rfork(RFFDG); - rendezvous(0, 0); - - close(s->infd); - if(s->infd != s->outfd) - close(s->outfd); - + rendezvous(s, (void*)(uintptr)fd[0]); +Out: if(cfd >= 0) close(cfd); + close(fd[1]); + return fd[0]; } diff --git a/sys/src/lib9p/share.c b/sys/src/lib9p/share.c index ff73e9c3e..afa01c2f2 100644 --- a/sys/src/lib9p/share.c +++ b/sys/src/lib9p/share.c @@ -8,7 +8,7 @@ void postsharesrv(Srv *s, char *name, char *mtpt, char *desc) { char buf[80]; - int cfd; + int cfd, sfd; if(mtpt != nil && desc != nil){ snprint(buf, sizeof buf, "#σc/%s", mtpt); @@ -21,12 +21,13 @@ postsharesrv(Srv *s, char *name, char *mtpt, char *desc) } else cfd = -1; - postsrv(s, name); - + sfd = postsrv(s, name); + if(sfd < 0) + sysfatal("postsrv: %r"); if(cfd >= 0){ - if(fprint(cfd, "%d\n", s->srvfd) < 0) + if(fprint(cfd, "%d\n", sfd) < 0) sysfatal("write %s: %r", buf); close(cfd); } - close(s->srvfd); + close(sfd); } diff --git a/sys/src/lib9p/threadpostsrv.c b/sys/src/lib9p/threadpostsrv.c index abdb882e8..b627a8653 100644 --- a/sys/src/lib9p/threadpostsrv.c +++ b/sys/src/lib9p/threadpostsrv.c @@ -4,10 +4,10 @@ #include #include <9p.h> -void +int threadpostsrv(Srv *s, char *name) { if(s->forker == nil) s->forker = threadsrvforker; - postsrv(s, name); + return postsrv(s, name); } -- cgit v1.2.3