diff --git a/src/client/component/demo_recording.cpp b/src/client/component/demo_recording.cpp index 38d340f..3a51e6d 100644 --- a/src/client/component/demo_recording.cpp +++ b/src/client/component/demo_recording.cpp @@ -326,7 +326,8 @@ namespace // demo class // store gamestate for user file 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; auto_buffer_.reserve_memory(reserve_size); diff --git a/src/client/component/demo_sv_recording.cpp b/src/client/component/demo_sv_recording.cpp index 9ab3e7f..ab8b61e 100644 --- a/src/client/component/demo_sv_recording.cpp +++ b/src/client/component/demo_sv_recording.cpp @@ -377,9 +377,8 @@ namespace // server demos class // write general, mod and map headers to the buffer once if (!client.is_buffer_active()) { - // reserve memory (low size if auto recording is enabled, because then the demo writes almost directly to disk) - const auto reserve_size = (sv_demo_autorecord && sv_demo_autorecord->current.enabled) ? 8192 : 512 * 1024; - client.buffer.reserve_memory(reserve_size); + // reserve memory up front to minimize further (re)allocations + client.buffer.reserve_memory(1024 * 1024); sv_write_general_header(client.buffer, game::mp::svs->clients[client_num.value()].name); write_mod_header(client.buffer); @@ -434,6 +433,8 @@ namespace // server demos class 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()) { write_data_internal(client.buffer);