diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-03-14 19:32:20 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-03-14 19:32:20 +0100 |
commit | 163dccbac04a3c9ab132005ebb4a96a0e0baec0b (patch) | |
tree | eb11e2920d6f9f467ad085e91e82fb36bffe73d2 /sys/src/cmd/upas | |
parent | d18440d992243c8e2f5a866d074a597c1a03754f (diff) |
upas/fs: make sure mbox is locked during msgdecref() in rclunk()
Diffstat (limited to 'sys/src/cmd/upas')
-rw-r--r-- | sys/src/cmd/upas/fs/fs.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/sys/src/cmd/upas/fs/fs.c b/sys/src/cmd/upas/fs/fs.c index 2b399ac3c..e34cfa25e 100644 --- a/sys/src/cmd/upas/fs/fs.c +++ b/sys/src/cmd/upas/fs/fs.c @@ -1442,17 +1442,17 @@ sanefid(f); /* coherence(); */ f->fid = -1; f->open = 0; - if(f->mtop){ - qlock(f->mb); - msgdecref(f->mb, f->mtop); - qunlock(f->mb); - } + mb = f->mb; + if(mb != nil) + qlock(mb); + if(f->mtop) + msgdecref(mb, f->mtop); if(f->m) - msgdecref(f->mb, gettopmsg(f->mb, f->m)); + msgdecref(mb, gettopmsg(mb, f->m)); f->m = f->mtop = nil; - mb = f->mb; if(mb != nil){ f->mb = nil; + qunlock(mb); assert(mb->refs > 0); qlock(&mbllock); mboxdecref(mb); |