kernel/vm: Allow calling AddressSpaceWriteLocker::SetTo with something already set.

Other Lockers behave this way, and the behavior will be needed in
_user_set_memory_protection.
This commit is contained in:
Augustin Cavalier
2026-06-18 18:06:09 -04:00
parent 2e98b42157
commit 61445814f2
@@ -219,7 +219,7 @@ AddressSpaceWriteLocker::Unset()
status_t status_t
AddressSpaceWriteLocker::SetTo(team_id team) AddressSpaceWriteLocker::SetTo(team_id team)
{ {
ASSERT(fSpace == NULL); Unset();
fSpace = VMAddressSpace::Get(team); fSpace = VMAddressSpace::Get(team);
if (fSpace == NULL) if (fSpace == NULL)
@@ -234,7 +234,7 @@ AddressSpaceWriteLocker::SetTo(team_id team)
void void
AddressSpaceWriteLocker::SetTo(VMAddressSpace* space, bool getNewReference) AddressSpaceWriteLocker::SetTo(VMAddressSpace* space, bool getNewReference)
{ {
ASSERT(fSpace == NULL); Unset();
fSpace = space; fSpace = space;
@@ -249,7 +249,7 @@ AddressSpaceWriteLocker::SetTo(VMAddressSpace* space, bool getNewReference)
status_t status_t
AddressSpaceWriteLocker::SetFromArea(area_id areaID, VMArea*& area) AddressSpaceWriteLocker::SetFromArea(area_id areaID, VMArea*& area)
{ {
ASSERT(fSpace == NULL); Unset();
fSpace = GetAddressSpaceByAreaID(areaID); fSpace = GetAddressSpaceByAreaID(areaID);
if (fSpace == NULL) if (fSpace == NULL)
@@ -273,7 +273,7 @@ status_t
AddressSpaceWriteLocker::SetFromArea(team_id team, area_id areaID, AddressSpaceWriteLocker::SetFromArea(team_id team, area_id areaID,
bool allowKernel, VMArea*& area) bool allowKernel, VMArea*& area)
{ {
ASSERT(fSpace == NULL); Unset();
VMAreas::ReadLock(); VMAreas::ReadLock();
@@ -560,8 +560,7 @@ MultiAddressSpaceLocker::AddAreaCacheAndLock(area_id areaID,
// done. // done.
if (cache == oldCache && firstArea == cache->areas.First()) { if (cache == oldCache && firstArea == cache->areas.First()) {
_area = area; _area = area;
if (_cache != NULL) *_cache = cache;
*_cache = cache;
return B_OK; return B_OK;
} }