Fix bug where Vnode kept its Inode alive indefinitely.

This commit is contained in:
Andreas Kling 2018-12-24 23:24:49 +01:00
parent 033a42b580
commit 12a6963a5d
Notes: sideshowbarker 2024-07-19 16:07:22 +09:00
2 changed files with 5 additions and 1 deletions

View file

@ -368,7 +368,10 @@ ByteBuffer procfs$vnodes()
path = static_cast<const TTY*>(dev)->tty_name();
}
}
ptr += ksprintf(ptr, "vnode %03u: %02u:%08u (%u) %s\n", i, vnode.inode.fsid(), vnode.inode.index(), vnode.retain_count(), path.characters());
ptr += ksprintf(ptr, "vnode %03u: %02u:%08u (%u) %s", i, vnode.inode.fsid(), vnode.inode.index(), vnode.retain_count(), path.characters());
if (vnode.characterDevice())
ptr += ksprintf(ptr, " (chardev: %p)", vnode.characterDevice());
ptr += ksprintf(ptr, "\n");
}
*ptr = '\0';
buffer.trim(ptr - (char*)buffer.pointer());

View file

@ -198,6 +198,7 @@ void VFS::freeNode(Vnode* node)
m_inode2vnode.remove(node->inode);
node->inode.fs()->release();
node->inode = InodeIdentifier();
node->m_core_inode = nullptr;
}
if (node->m_characterDevice) {
m_device2vnode.remove(encodedDevice(node->m_characterDevice->major(), node->m_characterDevice->minor()));