LibHTTP: Relax the finish_up() "must be called once" limitation a bit

It's alright for this function to be called multiple times, as it quits
early when a partial flush doesn't empty the download buffer.
Relax the assertion to having scheduled "did_finish()" only once.
This commit is contained in:
Ali Mohammad Pur 2021-06-29 01:40:18 +04:30 committed by Ali Mohammad Pur
parent b12e5de047
commit 3058ff1500
Notes: sideshowbarker 2024-07-18 11:22:09 +09:00
2 changed files with 5 additions and 3 deletions

View File

@ -360,7 +360,7 @@ void Job::timer_event(Core::TimerEvent& event)
void Job::finish_up() void Job::finish_up()
{ {
VERIFY(m_state != State::Finished); VERIFY(!m_has_scheduled_finish);
m_state = State::Finished; m_state = State::Finished;
if (!m_can_stream_response) { if (!m_can_stream_response) {
auto flattened_buffer = ByteBuffer::create_uninitialized(m_received_size); auto flattened_buffer = ByteBuffer::create_uninitialized(m_received_size);
@ -395,9 +395,10 @@ void Job::finish_up()
return; return;
} }
m_has_scheduled_finish = true;
auto response = HttpResponse::create(m_code, move(m_headers)); auto response = HttpResponse::create(m_code, move(m_headers));
deferred_invoke([this, response](auto&) { deferred_invoke([this, response = move(response)](auto&) {
did_finish(move(response)); did_finish(response);
}); });
} }
} }

View File

@ -64,6 +64,7 @@ protected:
Optional<size_t> m_current_chunk_total_size; Optional<size_t> m_current_chunk_total_size;
bool m_can_stream_response { true }; bool m_can_stream_response { true };
bool m_should_read_chunk_ending_line { false }; bool m_should_read_chunk_ending_line { false };
bool m_has_scheduled_finish { false };
}; };
} }