Hi,
I am investigating why Chromium can't reliably send sysex messages on Linux. (See https://bugs.chromium.org/p/chromium/issues/detail?id=917708.)
I've seen the message at https://alsa-devel.alsa-project.narkive.com/6w35hffF/sysex-overflow-when-usi...
Chromium does use seq and we do need sysex to be reliable since vendors such as Novation and Yamaha use Web MIDI to interface with hardware.
The code in question predates git history (2005). It's event_process_midi() and dump_midi() in seq_midi.c.
I see that dump_midi() returns either ENOMEM or EINVAL under certain conditions, but the only caller (event_process_midi()) throws these errors away and always returns 0 if everything but dump_midi() succeeds.
A few questions:
1. Can I change dump_midi to block instead of return ENOMEM if I don't use SND_SEQ_NONBLOCK in snd_seq_open?
2. What should be returned in NONBLOCK mode? Probably EAGAIN?
3. The general blocking behavior of seq seems inconsistent. If I am using snd_seq_ev_set_direct, then I get EAGAIN even with a blocking open. Should I expect blocking from the pool, or only if using a queue?
4. Is there any obvious fix I am overlooking?
Thanks,
Adam