mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-03 21:41:26 +12:00
util\serialization_ext.cpp: Fix queued data with no output
This commit is contained in:
parent
806758d06f
commit
1da7689526
1 changed files with 19 additions and 2 deletions
|
@ -420,7 +420,15 @@ bool compressed_serialization_file_handler::handle_file_op(utils::serial& ar, us
|
||||||
const usz old_size = ar.data.size();
|
const usz old_size = ar.data.size();
|
||||||
|
|
||||||
// Try to prefetch data by reading more than requested
|
// Try to prefetch data by reading more than requested
|
||||||
ar.data.resize(std::min<usz>(read_limit, std::max<usz>({ ar.data.capacity(), ar.data.size() + read_past_buffer * 3 / 2, ar.expect_little_data() ? usz{4096} : usz{0x10'0000} })));
|
const usz new_size = std::min<usz>(read_limit, std::max<usz>({ ar.data.capacity(), ar.data.size() + read_past_buffer * 3 / 2, ar.expect_little_data() ? usz{4096} : usz{0x10'0000} }));
|
||||||
|
|
||||||
|
if (new_size < old_size)
|
||||||
|
{
|
||||||
|
// Read limit forbids further reads at this point
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ar.data.resize(new_size);
|
||||||
ar.data.resize(this->read_at(ar, old_size + ar.data_offset, data ? const_cast<void*>(data) : ar.data.data() + old_size, ar.data.size() - old_size) + old_size);
|
ar.data.resize(this->read_at(ar, old_size + ar.data_offset, data ? const_cast<void*>(data) : ar.data.data() + old_size, ar.data.size() - old_size) + old_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -652,9 +660,18 @@ void compressed_serialization_file_handler::stream_data_prepare_thread_op()
|
||||||
}
|
}
|
||||||
while (m_zs.avail_out == 0 || m_zs.avail_in != 0);
|
while (m_zs.avail_out == 0 || m_zs.avail_in != 0);
|
||||||
|
|
||||||
|
if (m_errored)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!buffer_offset)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Forward for file write
|
// Forward for file write
|
||||||
const usz queued_size = data.size();
|
const usz queued_size = data.size();
|
||||||
ensure(buffer_offset);
|
|
||||||
|
|
||||||
const usz size_diff = buffer_offset - queued_size;
|
const usz size_diff = buffer_offset - queued_size;
|
||||||
const usz new_val = m_pending_bytes.add_fetch(size_diff);
|
const usz new_val = m_pending_bytes.add_fetch(size_diff);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue