On Tue, Jun 01, 2021 at 09:12:24PM +0000, Taylor R Campbell wrote: > audio(4): Set AUMODE_PLAY/RECORD only if asked _and_ supported. > > If one is requested and _not_ supported, fail; otherwise we might > enter audio_write with a null play track and crash on KASSERT.
It looks like this is an incompatible change. Sun says: - Attempts to open a device with FREAD set fail if the device is not capable of recording. (Likewise for FWRITE and playback.) https://github.com/illumos/illumos-gate/blob/9ecd05bdc59e4a1091c51ce68cce2028d5ba6fd1/usr/src/uts/common/io/audio/impl/audio_sun.c#L70 But in NetBSD 7... audio_open() does not return a clear failure: https://github.com/NetBSD/src/blob/netbsd-7/sys/dev/audio.c#L1652 EINVAL is returned if !audio_can_playback in audiostartp() https://github.com/NetBSD/src/blob/netbsd-7/sys/dev/audio.c#L2801 ... which is called from audio_write() So it looks to me like open() should succeed but write() should fail. This is important if you want to open an audio device just to test a few properties (i.e. AUDIO_GETPROPS, AUDIO_GETDEV...).