mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-01-06 08:36:15 +00:00
Kernel: Fix race conditions processing async device requests
This commit is contained in:
@@ -82,20 +82,15 @@ String Device::absolute_path(const FileDescription&) const
|
||||
|
||||
void Device::process_next_queued_request(Badge<AsyncDeviceRequest>, const AsyncDeviceRequest& completed_request)
|
||||
{
|
||||
AsyncDeviceRequest* next_request = nullptr;
|
||||
|
||||
{
|
||||
ScopedSpinLock lock(m_requests_lock);
|
||||
VERIFY(!m_requests.is_empty());
|
||||
VERIFY(m_requests.first().ptr() == &completed_request);
|
||||
m_requests.remove(m_requests.begin());
|
||||
if (!m_requests.is_empty())
|
||||
next_request = m_requests.first().ptr();
|
||||
ScopedSpinLock lock(m_requests_lock);
|
||||
VERIFY(!m_requests.is_empty());
|
||||
VERIFY(m_requests.first().ptr() == &completed_request);
|
||||
m_requests.remove(m_requests.begin());
|
||||
if (!m_requests.is_empty()) {
|
||||
auto* next_request = m_requests.first().ptr();
|
||||
next_request->do_start(move(lock));
|
||||
}
|
||||
|
||||
if (next_request)
|
||||
next_request->start();
|
||||
|
||||
evaluate_block_conditions();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user