MediumLock.h revision 0b7e814ff55b414309dab6dfddb70194d696a647
2f0d866e126dd288169fed591c259c1c6b4016e5vboxsync * VirtualBox medium object lock collections
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Copyright (C) 2010 Sun Microsystems, Inc.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * available from http://www.virtualbox.org. This file is free software;
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * General Public License (GPL) as published by the Free Software
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
2f0d866e126dd288169fed591c259c1c6b4016e5vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * additional information or have any questions.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync/* interface definitions */
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Single entry for medium lock lists. Has a medium object reference,
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * information about what kind of lock should be taken, and if it is
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * locked right now.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Default medium lock constructor.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Default medium lock destructor.
fe554d9c0e3a6de4ba221610ac95a44c7d288e01vboxsync * Create a new medium lock description
fe554d9c0e3a6de4ba221610ac95a44c7d288e01vboxsync * @param aMedium Reference to medium object
fe554d9c0e3a6de4ba221610ac95a44c7d288e01vboxsync * @param aLockWrite @c true means a write lock should be taken
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync MediumLock(const ComObjPtr<Medium> &aMedium, bool aLockWrite);
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Copy constructor. Needed because we contain an AutoCaller
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * instance which is deliberately not copyable. The copy is not
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * marked as locked, so be careful.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @param aMediumLock Reference to source object.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Update a medium lock description
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @note May be only used in unlocked state.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @return COM status code
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @param aLockWrite @c true means a write lock should be taken
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Get medium object reference.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Get medium object lock request type.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Acquire a medium lock.
7c48fdac0546978ed14617c8096734ce2d18c8e5vboxsync * @return COM status code
7c48fdac0546978ed14617c8096734ce2d18c8e5vboxsync * Release a medium lock.
7c48fdac0546978ed14617c8096734ce2d18c8e5vboxsync * @return COM status code
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync /** Flag whether the medium was skipped when taking the locks.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Only existing and accessible media objects need to be locked. */
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Medium lock list. Meant for storing the ordered locking information
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * for a single medium chain.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync /* Base list data type. */
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Default medium lock list constructor.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Default medium lock list destructor.
fe554d9c0e3a6de4ba221610ac95a44c7d288e01vboxsync * Checks if medium lock declaration list is empty.
fe554d9c0e3a6de4ba221610ac95a44c7d288e01vboxsync * @return true if list is empty.
fe554d9c0e3a6de4ba221610ac95a44c7d288e01vboxsync * Add a new medium lock declaration to the end of the list.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @note May be only used in unlocked state.
fe554d9c0e3a6de4ba221610ac95a44c7d288e01vboxsync * @return COM status code
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @param aMedium Reference to medium object
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @param aLockWrite @c true means a write lock should be taken
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync HRESULT Append(const ComObjPtr<Medium> &aMedium, bool aLockWrite);
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Add a new medium lock declaration to the beginning of the list.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @note May be only used in unlocked state.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @return COM status code
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @param aMedium Reference to medium object
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @param aLockWrite @c true means a write lock should be taken
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync HRESULT Prepend(const ComObjPtr<Medium> &aMedium, bool aLockWrite);
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Update a medium lock declaration.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @note May be only used in unlocked state.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @return COM status code
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @param aMedium Reference to medium object
fe554d9c0e3a6de4ba221610ac95a44c7d288e01vboxsync * @param aLockWrite @c true means a write lock should be taken
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync HRESULT Update(const ComObjPtr<Medium> &aMedium, bool aLockWrite);
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Remove a medium lock declaration and return an updated iterator.
762a68c2bb3ccde807330e3d1cb05f8b244a5f72vboxsync * @note May be used in locked state.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @return COM status code
fe554d9c0e3a6de4ba221610ac95a44c7d288e01vboxsync * @param aIt Iterator for the element to remove
fe554d9c0e3a6de4ba221610ac95a44c7d288e01vboxsync * Clear all medium lock declaration.
fe554d9c0e3a6de4ba221610ac95a44c7d288e01vboxsync * @note Implicitly unlocks all locks.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @return COM status code
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Get iterator begin() for base list.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Get iterator end() for base list.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Acquire all medium locks "atomically", i.e. all or nothing.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @return COM status code
9540eeb13face31ddc1c5f15338556fe46f18a77vboxsync * Release all medium locks.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @return COM status code
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Medium lock list map. Meant for storing a collection of lock lists.
9540eeb13face31ddc1c5f15338556fe46f18a77vboxsync * The usual use case is creating such a map when locking all medium chains
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * belonging to one VM, however that's not the limit. Be creative.
7c48fdac0546978ed14617c8096734ce2d18c8e5vboxsync * Default medium lock list map constructor.
7c48fdac0546978ed14617c8096734ce2d18c8e5vboxsync * Default medium lock list map destructor.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Checks if medium lock list map is empty.
7c48fdac0546978ed14617c8096734ce2d18c8e5vboxsync * @return true if list is empty.
7c48fdac0546978ed14617c8096734ce2d18c8e5vboxsync * Insert a new medium lock list into the map.
fe554d9c0e3a6de4ba221610ac95a44c7d288e01vboxsync * @note May be only used in unlocked state.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @return COM status code
7c48fdac0546978ed14617c8096734ce2d18c8e5vboxsync * @param aMediumAttachment Reference to medium attachment object, the key.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @param aMediumLockList Reference to medium lock list object
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync HRESULT Insert(const ComObjPtr<MediumAttachment> &aMediumAttachment, MediumLockList *aMediumLockList);
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Replace the medium lock list key by a different one.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @note May be used in locked state.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @return COM status code
7697e43970d863558b6c168a55e8948ccb18d8d1vboxsync * @param aMediumAttachmentOld Reference to medium attachment object.
7697e43970d863558b6c168a55e8948ccb18d8d1vboxsync * @param aMediumAttachmentNew Reference to medium attachment object.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync HRESULT ReplaceKey(const ComObjPtr<MediumAttachment> &aMediumAttachmentOld, const ComObjPtr<MediumAttachment> &aMediumAttachmentNew);
7c48fdac0546978ed14617c8096734ce2d18c8e5vboxsync * Remove a medium lock list from the map. The list will get deleted.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @note May be only used in unlocked state.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @return COM status code
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @param aMediumAttachment Reference to medium attachment object, the key.
7c48fdac0546978ed14617c8096734ce2d18c8e5vboxsync HRESULT Remove(const ComObjPtr<MediumAttachment> &aMediumAttachment);
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Clear all medium lock declarations in this map.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @note Implicitly unlocks all locks.
7c48fdac0546978ed14617c8096734ce2d18c8e5vboxsync * @return COM status code
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Get the medium lock list identified by the given key.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @note May be used in locked state.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @return COM status code
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @param aMediumAttachment Key for medium attachment object.
7c48fdac0546978ed14617c8096734ce2d18c8e5vboxsync * @param aMediumLockList Out: medium attachment object reference.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync HRESULT Get(const ComObjPtr<MediumAttachment> &aMediumAttachment, MediumLockList * &aMediumLockList);
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Acquire all medium locks "atomically", i.e. all or nothing.
7697e43970d863558b6c168a55e8948ccb18d8d1vboxsync * @return COM status code
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * Release all medium locks.
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync * @return COM status code
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync typedef std::map<ComObjPtr<MediumAttachment>, MediumLockList *> Base;
7697e43970d863558b6c168a55e8948ccb18d8d1vboxsync#endif /* !____H_MEDIUMLOCK */
016096e367cd20c3d3c3fd9a6650b55935c2e31dvboxsync/* vi: set tabstop=4 shiftwidth=4 expandtab: */