summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2022-12-11 10:19:53 -0500
committerWilliam Wilgus <me.theuser@yahoo.com>2022-12-11 22:17:12 -0500
commit863538c50a82478f239d634c022bb0b2d0149813 (patch)
tree25e9030bb8a7c389e58cf59ffab76aa079aa6b2c
parentac9066dd44a15c32efd5476a6228df05e10d89b0 (diff)
downloadrockbox-863538c50a82478f239d634c022bb0b2d0149813.tar.gz
rockbox-863538c50a82478f239d634c022bb0b2d0149813.zip
[Bug Fix] dsp_proc_enable init race / crash
haas surround is causing a seg fault it appears process is null see https://www.rockbox.org/tracker/task/13382 for details when the low_latency_callback is enabled it happens less frequently lets default to an empty process that way there are no NULL pointers to call Change-Id: Ib72ba1a58cbb20cef04b5ea50964adadeee74a75
-rw-r--r--lib/rbcodec/dsp/dsp_core.c9
-rw-r--r--lib/rbcodec/dsp/dsp_proc_entry.h2
2 files changed, 9 insertions, 2 deletions
diff --git a/lib/rbcodec/dsp/dsp_core.c b/lib/rbcodec/dsp/dsp_core.c
index b0e9c8a304..5a08ce8e37 100644
--- a/lib/rbcodec/dsp/dsp_core.c
+++ b/lib/rbcodec/dsp/dsp_core.c
@@ -214,6 +214,13 @@ dsp_proc_enable_delink(struct dsp_config *dsp, uint32_t mask)
214 } 214 }
215} 215}
216 216
217static void dsp_empty_process(struct dsp_proc_entry *this, struct dsp_buffer **buf_p)
218{
219 (void)this;
220 (void)buf_p;
221 logf("%s", __func__);
222}
223
217void dsp_proc_enable(struct dsp_config *dsp, enum dsp_proc_ids id, 224void dsp_proc_enable(struct dsp_config *dsp, enum dsp_proc_ids id,
218 bool enable) 225 bool enable)
219{ 226{
@@ -236,7 +243,7 @@ void dsp_proc_enable(struct dsp_config *dsp, enum dsp_proc_ids id,
236 { 243 {
237 /* New entry - set defaults */ 244 /* New entry - set defaults */
238 s->proc_entry.data = 0; 245 s->proc_entry.data = 0;
239 s->proc_entry.process = NULL; 246 s->proc_entry.process = dsp_empty_process;
240 } 247 }
241 248
242 enabled = proc_db_entry(s)->configure(&s->proc_entry, dsp, 249 enabled = proc_db_entry(s)->configure(&s->proc_entry, dsp,
diff --git a/lib/rbcodec/dsp/dsp_proc_entry.h b/lib/rbcodec/dsp/dsp_proc_entry.h
index a4f7b71f9c..0a65792207 100644
--- a/lib/rbcodec/dsp/dsp_proc_entry.h
+++ b/lib/rbcodec/dsp/dsp_proc_entry.h
@@ -103,7 +103,7 @@ typedef void (*dsp_proc_fn_type)(struct dsp_proc_entry *this,
103 * 103 *
104 * default settings: 104 * default settings:
105 * .data = 0 105 * .data = 0
106 * .process = NULL 106 * .process = dsp_empty_process (dsp_core.c)
107 * 107 *
108 * DSP_PROC_INIT handler just has to change what it needs to change. It may 108 * DSP_PROC_INIT handler just has to change what it needs to change. It may
109 * also be modified at any time to implement the stage's demands. 109 * also be modified at any time to implement the stage's demands.