From 7011ad4848f78ddfb208cd47ef2c7303de55482e Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Wed, 17 Apr 2024 11:28:37 -0700 Subject: [PATCH] audio: handle possible invalidated pointer after buffer growth Signed-off-by: Stephen Gutekanst --- src/Audio.zig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Audio.zig b/src/Audio.zig index cb59b8b1..37a5ef13 100644 --- a/src/Audio.zig +++ b/src/Audio.zig @@ -107,7 +107,7 @@ fn audioTick(audio: *Mod) !void { // How many audio samples we will render ahead by const samples_per_ms = @as(f32, @floatFromInt(player.sampleRate())) / 1000.0; - const render_ahead: u32 = @as(u32, @intFromFloat(@trunc(audio.state().ms_render_ahead * samples_per_ms))) * @as(u32, @truncate(player.channels().len)); + const render_ahead: u32 = @as(u32, @intFromFloat(@trunc(audio.state().ms_render_ahead * samples_per_ms))) * @as(u32, @intCast(player.channels().len)); // Our goal is to ensure that we always have pre-rendered the number of samples the driver last // expected, expects, plus the play ahead amount. @@ -122,10 +122,10 @@ fn audioTick(audio: *Mod) !void { // Ensure our f32 mixing buffer has enough space for the samples we will render right now. // This will allocate to grow but never shrink. - var mixing_buffer = if (audio.state().mixing_buffer) |b| b else blk: { + var mixing_buffer = if (audio.state().mixing_buffer) |*b| b else blk: { const b = try std.ArrayListUnmanaged(f32).initCapacity(allocator, render_num_samples); audio.state().mixing_buffer = b; - break :blk b; + break :blk &audio.state().mixing_buffer.?; }; try mixing_buffer.resize(allocator, render_num_samples); // grows, but never shrinks