#
564f56b1 |
|
20-Jul-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Fix node handling on package addition/removal * UnpackingLeafNode: Add a fFinalPackageNode attribute. It is set when the node is about to be removed and will point to the node's previous head package node and be used in its stead. From the perspective of the FS hooks this leaves the node in an unchanged state. * Unpacking[Leaf,Directory]Node: - Add WillBeFirstPackageNode(), returning whether the given package node would become the head package node when added. - Add PrepareForRemoval() which removes all package nodes. In case of UnpackingLeafNode it also sets fFinalPackageNode. - Add CloneTransferPackageNodes(). It is only implemented for UnpackingLeafNode. It clones the node, transfers all package nodes to the clone and sets fFinalPackageNode on this node. * Volume::_{Add,Remove}PackageNode(): Solved the following TODO: When a package is added or removed and a file present in both the added/removed package and another package with the version in the former having precedence, we have to remove the node (leaving it unchanged) and replace it by a new node. This prevents clients having the node opened or mapped from suddenly seeing different data. It also fixes unbalanced calls to PackageNode::VFSInit()/VFSUninit() which would result in file descriptors to package files being leaked.
|
#
20142717 |
|
23-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Remove package related dependencies from Node * Move package related methods from Node to new interface UnpackingNode. * LeafNode and Directory derive from UnpackingNode now. * Adjust Volume implementation accordingly.
|
#
564f56b15075b0d15349ebfcc24f07b33ce109a0 |
|
20-Jul-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Fix node handling on package addition/removal * UnpackingLeafNode: Add a fFinalPackageNode attribute. It is set when the node is about to be removed and will point to the node's previous head package node and be used in its stead. From the perspective of the FS hooks this leaves the node in an unchanged state. * Unpacking[Leaf,Directory]Node: - Add WillBeFirstPackageNode(), returning whether the given package node would become the head package node when added. - Add PrepareForRemoval() which removes all package nodes. In case of UnpackingLeafNode it also sets fFinalPackageNode. - Add CloneTransferPackageNodes(). It is only implemented for UnpackingLeafNode. It clones the node, transfers all package nodes to the clone and sets fFinalPackageNode on this node. * Volume::_{Add,Remove}PackageNode(): Solved the following TODO: When a package is added or removed and a file present in both the added/removed package and another package with the version in the former having precedence, we have to remove the node (leaving it unchanged) and replace it by a new node. This prevents clients having the node opened or mapped from suddenly seeing different data. It also fixes unbalanced calls to PackageNode::VFSInit()/VFSUninit() which would result in file descriptors to package files being leaked.
|
#
20142717e78e3d349d0da642a8a5ae66a6d0a415 |
|
23-Jun-2011 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Remove package related dependencies from Node * Move package related methods from Node to new interface UnpackingNode. * LeafNode and Directory derive from UnpackingNode now. * Adjust Volume implementation accordingly.
|