When a node has faked attributes, we cannot drop our node. Reinitialize the lock box as if the node was dropped. This fixes the following bug:
% fakeroot-hurd /bin/sh -c 'touch /tmp/$$.lock chown 0 /tmp/$$.lock l(){ flock /tmp/$$.lock true; }; l; l' <hangs> * trans/fakeroot.c (fake_node_dropweak): Unlock the node if the last real reference is dropped but we keep a fake one. --- trans/fakeroot.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/trans/fakeroot.c b/trans/fakeroot.c index 3756f48..920367d 100644 --- a/trans/fakeroot.c +++ b/trans/fakeroot.c @@ -172,6 +172,9 @@ fakeroot_netfs_release_protid (void *cookie) account for that fake reference. */ np->nn->faked |= FAKE_REFERENCE; + /* Clear the lock box as if the file was closed. */ + fshelp_lock_init (&np->userlock); + /* We keep our node. */ goto out; } -- 1.7.10.4