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:
Родитель
eebdd3f61b
Коммит
e4dd8bca3d
|
@ -445,10 +445,15 @@ int synth_add(struct spk_synth *in_synth)
|
|||
mutex_unlock(&spk_mutex);
|
||||
return -1;
|
||||
}
|
||||
synths[i++] = in_synth;
|
||||
synths[i] = NULL;
|
||||
|
||||
if (in_synth->startup)
|
||||
status = do_synth_init(in_synth);
|
||||
|
||||
if (!status) {
|
||||
synths[i++] = in_synth;
|
||||
synths[i] = NULL;
|
||||
}
|
||||
|
||||
mutex_unlock(&spk_mutex);
|
||||
return status;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче