diff options
author | William Wilgus <wilgus.william@gmail.com> | 2022-12-11 10:19:53 -0500 |
---|---|---|
committer | William Wilgus <me.theuser@yahoo.com> | 2022-12-11 22:17:12 -0500 |
commit | 863538c50a82478f239d634c022bb0b2d0149813 (patch) | |
tree | 25e9030bb8a7c389e58cf59ffab76aa079aa6b2c | |
parent | ac9066dd44a15c32efd5476a6228df05e10d89b0 (diff) | |
download | rockbox-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.c | 9 | ||||
-rw-r--r-- | lib/rbcodec/dsp/dsp_proc_entry.h | 2 |
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 | ||
217 | static 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 | |||
217 | void dsp_proc_enable(struct dsp_config *dsp, enum dsp_proc_ids id, | 224 | void 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. |