From 3a29319f688f8ed7fe4fd916289cb7b125edd2a5 Mon Sep 17 00:00:00 2001 From: jrose Date: Mon, 14 Mar 2011 13:12:51 +0000 Subject: Fixes null reference bug introduced by audio hook changes that affects various OS distributions. Thanks David. git-svn-id: http://svn.digium.com/svn/asterisk/trunk@310547 f38db490-d61c-443f-a65b-d21fe96a405b --- main/audiohook.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/main/audiohook.c b/main/audiohook.c index bb510e333..a1d658ce7 100644 --- a/main/audiohook.c +++ b/main/audiohook.c @@ -311,25 +311,26 @@ static struct ast_frame *audiohook_read_frame_both(struct ast_audiohook *audioho ast_debug(1, "Failed to get %d samples from write factory %p\n", (int)samples, &audiohook->write_factory); /* Basically we figure out which buffer to use... and if mixing can be done here */ - if (!read_buf && !write_buf) - return NULL; - - if (read_buf) { - final_buf = buf1; - frame.data.ptr = final_buf; + if (read_buf && read_reference) { + frame.data.ptr = buf1; *read_reference = ast_frdup(&frame); } - - if (write_buf) { - final_buf = buf2; - frame.data.ptr = final_buf; + if (write_buf && write_reference) { + frame.data.ptr = buf2; *write_reference = ast_frdup(&frame); } if (read_buf && write_buf) { - for (i = 0, data1 = read_buf, data2 = write_buf; i < samples; i++, data1++, data2++) + for (i = 0, data1 = read_buf, data2 = write_buf; i < samples; i++, data1++, data2++) { ast_slinear_saturated_add(data1, data2); + } + final_buf = buf1; + } else if (read_buf) { final_buf = buf1; + } else if (write_buf) { + final_buf = buf2; + } else { + return NULL; } /* Make the final buffer part of the frame, so it gets duplicated fine */ -- cgit v1.2.3