summaryrefslogtreecommitdiff
path: root/lib9p/srv.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib9p/srv.c')
-rw-r--r--lib9p/srv.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/lib9p/srv.c b/lib9p/srv.c
index df53940..ea8b932 100644
--- a/lib9p/srv.c
+++ b/lib9p/srv.c
@@ -556,10 +556,13 @@ static inline struct _srv_fidinfo *srv_util_fidsave(struct _lib9p_srv_req *ctx,
if (overwrite) {
struct srv_pathinfo *old_pathinfo = pathmap_load(&ctx->parent_sess->paths, fidinfo->path);
assert(old_pathinfo);
- if (srv_util_pathisdir(old_pathinfo))
- LO_CALL(fidinfo->dir.io, iofree);
- else
- LO_CALL(fidinfo->file.io, iofree);
+ if (srv_util_pathisdir(old_pathinfo)) {
+ if (!LO_IS_NULL(fidinfo->dir.io))
+ LO_CALL(fidinfo->dir.io, iofree);
+ } else {
+ if (!LO_IS_NULL(fidinfo->file.io))
+ LO_CALL(fidinfo->file.io, iofree);
+ }
srv_util_pathfree(ctx, fidinfo->path);
} else {
lib9p_error(&ctx->ctx.basectx,
@@ -819,13 +822,6 @@ static void handle_Twalk(struct _lib9p_srv_req *ctx,
pathinfo = new_pathinfo;
}
if (resp->nwqid == req->nwname) {
- if (req->newfid == req->fid) {
- if (srv_util_pathisdir(pathinfo))
- LO_CALL(fidinfo->dir.io, iofree);
- else
- LO_CALL(fidinfo->file.io, iofree);
- fidinfo->flags = 0;
- }
if (!srv_util_fidsave(ctx, req->newfid, pathinfo, req->newfid == req->fid))
srv_util_pathfree(ctx, LO_CALL(pathinfo->file, qid).path);
} else {