mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-04 13:29:59 -05:00
ladspa-sink: Set a silence memchunk for the memblockq
A crash was observed that was caused by pa_memblockq_peek() returning
a NULL memblock in sink_input_pop_cb(). The scenario where this was
happening was
1. Delete 2 rtp-recv's connected to a ladspa-sink
2. Delete ladspa-sink
3. Delete alsa-sink
4. Create alsa-sink
5. Create ladspa-sink
6. Create 2 rtp-recv's connected to the ladspa-sink
The crash was probably caused by a rewind that made the read index go
negative while the write index was at least zero, causing there to be
a gap in the memblockq. The problematic rewind might have been caused
by adding the rtp-recv stream to the ladspa-sink. That has not been
proven, but this looks very similar to the bug that was fixed in
module-virtual-sink in commit 6bd34156b1.
This commit is contained in:
parent
dbe66b0b5e
commit
e96785c1c3
1 changed files with 5 additions and 1 deletions
|
|
@ -966,6 +966,7 @@ int pa__init(pa_module*m) {
|
||||||
const char *e, *cdata;
|
const char *e, *cdata;
|
||||||
const LADSPA_Descriptor *d;
|
const LADSPA_Descriptor *d;
|
||||||
unsigned long p, h, j, n_control, c;
|
unsigned long p, h, j, n_control, c;
|
||||||
|
pa_memchunk silence;
|
||||||
|
|
||||||
pa_assert(m);
|
pa_assert(m);
|
||||||
|
|
||||||
|
|
@ -1010,7 +1011,6 @@ int pa__init(pa_module*m) {
|
||||||
u = pa_xnew0(struct userdata, 1);
|
u = pa_xnew0(struct userdata, 1);
|
||||||
u->module = m;
|
u->module = m;
|
||||||
m->userdata = u;
|
m->userdata = u;
|
||||||
u->memblockq = pa_memblockq_new("module-ladspa-sink memblockq", 0, MEMBLOCKQ_MAXLENGTH, 0, &ss, 1, 1, 0, NULL);
|
|
||||||
u->max_ladspaport_count = 1; /*to avoid division by zero etc. in pa__done when failing before this value has been set*/
|
u->max_ladspaport_count = 1; /*to avoid division by zero etc. in pa__done when failing before this value has been set*/
|
||||||
u->channels = 0;
|
u->channels = 0;
|
||||||
u->input = NULL;
|
u->input = NULL;
|
||||||
|
|
@ -1293,6 +1293,10 @@ int pa__init(pa_module*m) {
|
||||||
|
|
||||||
u->sink->input_to_master = u->sink_input;
|
u->sink->input_to_master = u->sink_input;
|
||||||
|
|
||||||
|
pa_sink_input_get_silence(u->sink_input, &silence);
|
||||||
|
u->memblockq = pa_memblockq_new("module-ladspa-sink memblockq", 0, MEMBLOCKQ_MAXLENGTH, 0, &ss, 1, 1, 0, &silence);
|
||||||
|
pa_memblock_unref(silence.memblock);
|
||||||
|
|
||||||
pa_sink_put(u->sink);
|
pa_sink_put(u->sink);
|
||||||
pa_sink_input_put(u->sink_input);
|
pa_sink_input_put(u->sink_input);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue