mirror of
https://github.com/torvalds/linux.git
synced 2024-11-29 15:41:36 +00:00
staging: speakup: fix synth caching when synth init fails
synths[] array caches currently loaded synths. synth_add checks synths[] before adding a new one. It however ignores the result of do_synth_init. So when do_synth_init fails, the failed synth is still cached. Since, as a result module loading fails too, synth_remove - which is responsible for removing the cached synth - is never called. Next time the failing synth is added again it succeeds because synth_add finds it cached inside synths[]. This patch fixes this by caching a synth only after do_synth_init succeeds. Signed-off-by: Okash Khawaja <okash.khawaja@gmail.com> Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
eebdd3f61b
commit
e4dd8bca3d
@ -445,10 +445,15 @@ int synth_add(struct spk_synth *in_synth)
|
|||||||
mutex_unlock(&spk_mutex);
|
mutex_unlock(&spk_mutex);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
synths[i++] = in_synth;
|
|
||||||
synths[i] = NULL;
|
|
||||||
if (in_synth->startup)
|
if (in_synth->startup)
|
||||||
status = do_synth_init(in_synth);
|
status = do_synth_init(in_synth);
|
||||||
|
|
||||||
|
if (!status) {
|
||||||
|
synths[i++] = in_synth;
|
||||||
|
synths[i] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
mutex_unlock(&spk_mutex);
|
mutex_unlock(&spk_mutex);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user