freebsd-src/share
Christos Margiolis 44e128fe9d sound: Implement asynchronous device detach
Hot-unplugging a sound device, such as a USB sound card, whilst being
consumed by an application, results in an infinite loop until either the
application closes the device's file descriptor, or the channel
automatically times out after hw.snd.timeout seconds. In the case of a
detach however, the timeout approach is still not ideal, since we want
all resources to be released immediatelly, without waiting for N seconds
until we can use the bus again.

The timeout mechanism works by calling chn_sleep() in chn_read() and
chn_write() (see pcm/channel.c) in order to send the thread to sleep,
using cv_timedwait_sig(). Since chn_sleep() sets the CHN_F_SLEEPING flag
while waiting for cv_timedwait_sig() to return, we can test this flag in
pcm_unregister() (called during detach) and wakeup the sleeping
thread(s) to immediately kill the channel(s) being consumed.

Sponsored by:	The FreeBSD Foundation
MFC after:	2 months
PR:		194727
Reviewed by:	dev_submerge.ch, bapt, markj
Differential Revision:	https://reviews.freebsd.org/D43545
2024-04-11 20:06:50 +02:00
..
colldef Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
colldef_unicode Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
ctypedef Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
dict share: Remove ancient SCCS tags. 2023-11-26 22:23:29 -07:00
doc Grammar fix in share/doc/IPv6/IMPLEMENTATION 2024-02-13 15:16:01 +08:00
dtrace libdtrace: decode all tcp header flags and add 2023-12-31 15:02:03 +01:00
examples share/examples/sound: Fix spelling "controller" 2024-02-13 14:18:04 +08:00
i18n Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
keys Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
man sound: Implement asynchronous device detach 2024-04-11 20:06:50 +02:00
misc Add OpenBSD 7.5 to bsd-family-tree 2024-04-05 15:33:48 +02:00
mk config.mk: Add MK_VIMAGE knob 2024-04-09 13:05:56 -04:00
monetdef Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
monetdef_unicode Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
msgdef msgdef: fix NO and SI locales 2023-09-21 12:54:21 +02:00
msgdef_unicode Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
numericdef Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
numericdef_unicode Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
security Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
sendmail Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
skel dot.profile: handle symlinked $HOME 2024-02-13 13:24:22 -05:00
snmp Remove $FreeBSD$: two-line lua tag 2023-08-16 11:55:30 -06:00
syscons Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
tabset share: Remove ancient SCCS tags. 2023-11-26 22:23:29 -07:00
termcap share: Remove ancient SCCS tags. 2023-11-26 22:23:29 -07:00
tests Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
timedef Remove $FreeBSD$: one-line sh pattern 2023-08-16 11:55:03 -06:00
vt Trim various $FreeBSD$ 2023-10-10 10:34:43 -07:00
zoneinfo Fix share/zoneinfo for DIRDEPS_BUILD 2023-11-20 12:52:43 -08:00
Makefile share: Remove ancient SCCS tags. 2023-11-26 22:23:29 -07:00
Makefile.inc share: Remove ancient SCCS tags. 2023-11-26 22:23:29 -07:00