Hey,
On Tue, 3 Mar 2020, Kuninori Morimoto wrote:
Kai Vehmanen wrote:
int snd_soc_component_close(struct snd_soc_component *component, » » » struct snd_pcm_substream *substream) { /* * lookup substream from "component->substream_List", * only call driver->close() if found */ ...
... this is arguably more code, but makes the state created in snd_soc_component_open() explicit. Upon error in middle of
But, 1 point I still not yet understand.
close() will be called 1) when open failed, or, 2) normal close. If my understanding was correct, your code is caring that 2) normal close() might be called without open().
it also covers case (1) when open fails. So instead of the currently merged error case rollback code in soc_pcm_components_open(), we'd just call snd_pcm_components_close(substream) directly in case of error. With tracking of opened substreams in soc-component.c, close() is safe to call also in error case.
But you are right, I don't really see how (2) could be hit, so we are essentially talking about how to avoid the <10 lines of rollback code in soc_pcm_components_open(). :)
That considered, I'm fine if you can come up with a cleaner version to handle just case (1), without tracking substreams. Maybe worth a try and if it doesn't work (e.g. with ID/tag), we can look at substream tracking.
Br, Kai