kernel/device_manager: Always use the marker in the IOScheduler.
When dropping the lock (or calling _Finisher) the owner could go away. So we have to keep track of our position in the list a different way. Fixes #20213. Change-Id: I1f0857c05ec985c7fe2f913a75be20ea91e6994c Reviewed-on: https://review.haiku-os.org/c/haiku/+/11405 Reviewed-by: waddlesplash <[email protected]> (cherry picked from commit e6155d041190f459d601022bd63840819d2beecc) Reviewed-on: https://review.haiku-os.org/c/haiku/+/11407
This commit is contained in:
committed by
waddlesplash
parent
52d627b267
commit
be1b4b813d
@@ -801,10 +801,9 @@ panic("no more requests for owner %p (thread %" B_PRId32 ")", owner, owner->thre
|
|||||||
_NextActiveRequestOwner(owner, quantum);
|
_NextActiveRequestOwner(owner, quantum);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the current owner doesn't have anymore requests, we have to
|
// Since we're going to drop the lock, we have to use the marker to
|
||||||
// insert our marker, since the owner will be gone in the next
|
// keep track of where we are in the ActiveRequestOwners list.
|
||||||
// iteration.
|
if (owner != NULL) {
|
||||||
if (owner->requests.IsEmpty()) {
|
|
||||||
fActiveRequestOwners.InsertBefore(owner, &marker);
|
fActiveRequestOwners.InsertBefore(owner, &marker);
|
||||||
owner = NULL;
|
owner = NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user