ALSA: hdsp: Break infinite MIDI input flush loop
The current MIDI input flush on HDSP and HDSPM drivers relies on the hardware reporting the right value. If the hardware doesn't give the proper value but returns -1, it may be stuck at an infinite loop. Add a counter and break if the loop is unexpectedly too long. Link: https://patch.msgid.link/20240808091513.31380-1-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
7b986c7430
commit
c01f381545
@ -1298,8 +1298,10 @@ static int snd_hdsp_midi_output_possible (struct hdsp *hdsp, int id)
|
|||||||
|
|
||||||
static void snd_hdsp_flush_midi_input (struct hdsp *hdsp, int id)
|
static void snd_hdsp_flush_midi_input (struct hdsp *hdsp, int id)
|
||||||
{
|
{
|
||||||
while (snd_hdsp_midi_input_available (hdsp, id))
|
int count = 256;
|
||||||
snd_hdsp_midi_read_byte (hdsp, id);
|
|
||||||
|
while (snd_hdsp_midi_input_available(hdsp, id) && --count)
|
||||||
|
snd_hdsp_midi_read_byte(hdsp, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_hdsp_midi_output_write (struct hdsp_midi *hmidi)
|
static int snd_hdsp_midi_output_write (struct hdsp_midi *hmidi)
|
||||||
|
@ -1838,8 +1838,10 @@ static inline int snd_hdspm_midi_output_possible (struct hdspm *hdspm, int id)
|
|||||||
|
|
||||||
static void snd_hdspm_flush_midi_input(struct hdspm *hdspm, int id)
|
static void snd_hdspm_flush_midi_input(struct hdspm *hdspm, int id)
|
||||||
{
|
{
|
||||||
while (snd_hdspm_midi_input_available (hdspm, id))
|
int count = 256;
|
||||||
snd_hdspm_midi_read_byte (hdspm, id);
|
|
||||||
|
while (snd_hdspm_midi_input_available(hdspm, id) && --count)
|
||||||
|
snd_hdspm_midi_read_byte(hdspm, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_hdspm_midi_output_write (struct hdspm_midi *hmidi)
|
static int snd_hdspm_midi_output_write (struct hdspm_midi *hmidi)
|
||||||
|
Loading…
Reference in New Issue
Block a user