forked from alterware/iw6-mod
Fixed incorrect vector reserve when auto recording.
This commit is contained in:
@@ -326,7 +326,8 @@ namespace // demo class
|
|||||||
// store gamestate for user file
|
// store gamestate for user file
|
||||||
write_network_data(crit_data_, network_data);
|
write_network_data(crit_data_, network_data);
|
||||||
|
|
||||||
// reserve memory (low size if auto recording is enabled, because then the demo writes almost directly to disk)
|
// reserve memory; use smaller buffer size when auto recording is enabled,
|
||||||
|
// since the data is written to disk almost right away.
|
||||||
const auto reserve_size = (demo_autorecord && demo_autorecord->current.enabled) ? 8192 : 1024 * 1024;
|
const auto reserve_size = (demo_autorecord && demo_autorecord->current.enabled) ? 8192 : 1024 * 1024;
|
||||||
auto_buffer_.reserve_memory(reserve_size);
|
auto_buffer_.reserve_memory(reserve_size);
|
||||||
|
|
||||||
|
|||||||
@@ -377,9 +377,8 @@ namespace // server demos class
|
|||||||
// write general, mod and map headers to the buffer once
|
// write general, mod and map headers to the buffer once
|
||||||
if (!client.is_buffer_active())
|
if (!client.is_buffer_active())
|
||||||
{
|
{
|
||||||
// reserve memory (low size if auto recording is enabled, because then the demo writes almost directly to disk)
|
// reserve memory up front to minimize further (re)allocations
|
||||||
const auto reserve_size = (sv_demo_autorecord && sv_demo_autorecord->current.enabled) ? 8192 : 512 * 1024;
|
client.buffer.reserve_memory(1024 * 1024);
|
||||||
client.buffer.reserve_memory(reserve_size);
|
|
||||||
|
|
||||||
sv_write_general_header(client.buffer, game::mp::svs->clients[client_num.value()].name);
|
sv_write_general_header(client.buffer, game::mp::svs->clients[client_num.value()].name);
|
||||||
write_mod_header(client.buffer);
|
write_mod_header(client.buffer);
|
||||||
@@ -434,6 +433,8 @@ namespace // server demos class
|
|||||||
|
|
||||||
auto& client = get_client(client_num);
|
auto& client = get_client(client_num);
|
||||||
|
|
||||||
|
// keep buffering data even when recording a demo so subsequent demos for the same client
|
||||||
|
// can be recorded using the entire buffer; the entire buffer is required for demos to be valid
|
||||||
if (client.is_buffer_active())
|
if (client.is_buffer_active())
|
||||||
{
|
{
|
||||||
write_data_internal(client.buffer);
|
write_data_internal(client.buffer);
|
||||||
|
|||||||
Reference in New Issue
Block a user