diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-06-01 18:37:10 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-06-01 18:37:10 +0200 |
commit | 356d52e1852c7bec071cb142352ce7b87eaac2f4 (patch) | |
tree | 413472c32d039190f84c4c4b7cac984ed4e306fc /libdiskfs/peropen-rele.c | |
parent | 9e3b662812cebe8113a144c705eddbbd3855f54b (diff) | |
download | hurd-356d52e1852c7bec071cb142352ce7b87eaac2f4.tar.gz hurd-356d52e1852c7bec071cb142352ce7b87eaac2f4.tar.bz2 hurd-356d52e1852c7bec071cb142352ce7b87eaac2f4.zip |
libdiskfs: Add missing node lock around fshelp_rlock_drop_peropen call
fshelp_rlock_drop_peropen actually needs the node to be locked for
proper waiting atomicity.
Diffstat (limited to 'libdiskfs/peropen-rele.c')
-rw-r--r-- | libdiskfs/peropen-rele.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/libdiskfs/peropen-rele.c b/libdiskfs/peropen-rele.c index ee447677..028b5d71 100644 --- a/libdiskfs/peropen-rele.c +++ b/libdiskfs/peropen-rele.c @@ -32,11 +32,10 @@ diskfs_release_peropen (struct peropen *po) if (po->shadow_root_parent) mach_port_deallocate (mach_task_self (), po->shadow_root_parent); + + pthread_mutex_lock (&po->np->lock); fshelp_rlock_drop_peropen (&po->lock_status); - if (fshelp_rlock_peropen_status(&po->lock_status) != LOCK_UN) - diskfs_nput (po->np); - else - diskfs_nrele (po->np); + diskfs_nput (po->np); fshelp_rlock_po_fini (&po->lock_status); free (po->path); |