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