From 21ff565f76443c658cfd5a67e0cc0402a2c64ecd Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sat, 3 Apr 2010 16:11:47 +0000 Subject: [PATCH] AddressSpaceWriteLocker: Added VMAddressSpace* constructor and SetTo() versions. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36029 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/vm/VMAddressSpaceLocking.cpp | 24 +++++++++++++++++++ src/system/kernel/vm/VMAddressSpaceLocking.h | 4 ++++ 2 files changed, 28 insertions(+) diff --git a/src/system/kernel/vm/VMAddressSpaceLocking.cpp b/src/system/kernel/vm/VMAddressSpaceLocking.cpp index 67cae41170..0fb7da4436 100644 --- a/src/system/kernel/vm/VMAddressSpaceLocking.cpp +++ b/src/system/kernel/vm/VMAddressSpaceLocking.cpp @@ -173,6 +173,17 @@ AddressSpaceWriteLocker::AddressSpaceWriteLocker(team_id team) } +AddressSpaceWriteLocker::AddressSpaceWriteLocker(VMAddressSpace* space, + bool getNewReference) + : + fSpace(NULL), + fLocked(false), + fDegraded(false) +{ + SetTo(space, getNewReference); +} + + AddressSpaceWriteLocker::AddressSpaceWriteLocker() : fSpace(NULL), @@ -210,6 +221,19 @@ AddressSpaceWriteLocker::SetTo(team_id team) } +void +AddressSpaceWriteLocker::SetTo(VMAddressSpace* space, bool getNewReference) +{ + fSpace = space; + + if (getNewReference) + fSpace->Get(); + + fSpace->WriteLock(); + fLocked = true; +} + + status_t AddressSpaceWriteLocker::SetFromArea(area_id areaID, VMArea*& area) { diff --git a/src/system/kernel/vm/VMAddressSpaceLocking.h b/src/system/kernel/vm/VMAddressSpaceLocking.h index b0d23900c0..cf2ed7d62f 100644 --- a/src/system/kernel/vm/VMAddressSpaceLocking.h +++ b/src/system/kernel/vm/VMAddressSpaceLocking.h @@ -53,10 +53,14 @@ private: class AddressSpaceWriteLocker : private AddressSpaceLockerBase { public: AddressSpaceWriteLocker(team_id team); + AddressSpaceWriteLocker(VMAddressSpace* space, + bool getNewReference); AddressSpaceWriteLocker(); ~AddressSpaceWriteLocker(); status_t SetTo(team_id team); + void SetTo(VMAddressSpace* space, + bool getNewReference); status_t SetFromArea(area_id areaID, VMArea*& area); status_t SetFromArea(team_id team, area_id areaID, bool allowKernel, VMArea*& area);