mirror of
https://github.com/opnsense/src.git
synced 2026-02-15 08:38:13 -05:00
--------------------
- Seal the fate of long standing memory leak (4 years, 7 months) during
pcm_unregister(). While destroying cdevs, scan / detect possible
children and free its SLIST placeholder properly.
- Optimize channel allocation / numbering even further. Do brute cyclic
checking only if the channel numbering screwed.
- Mega vchan create/destroy cleanup:
o Implement pcm_setvchans() so everybody can use it freely instead
of implementing their own, be it through sysctl or channel auto
allocation.
o Increase vchan creation/destruction resiliency:
+ it's possible to increase/decrease total vchans even during
busy playback/recording. Busy channel will be left alone, untouched.
Abusive test sample:
# play whatever...
#
while : ; do
sysctl hw.snd.pcm0.vchans=1
sysctl hw.snd.pcm0.vchans=10
sysctl hw.snd.pcm0.vchans=100
sysctl hw.snd.pcm0.vchans=200
done
# Play something else, leave above loop running frantically.
+ Seal another 4 years old bug where it is possible to destroy (virtual)
channel even when its cdevs being referenced by other process.
The "First Come First Served" nature of dsp_clone() is the main
culprit of this issue, and usually manifest itself as dangling
channel <-> process association. Ensure that all of its cdevs
are free from being referenced before destroying it (through
ORPHAN_CDEVT() macross).
All these fixes (including previous fixes) will be MFCed, later.
|
||
|---|---|---|
| .. | ||
| ac97.c | ||
| ac97.h | ||
| ac97_if.m | ||
| ac97_patch.c | ||
| ac97_patch.h | ||
| buffer.c | ||
| buffer.h | ||
| channel.c | ||
| channel.h | ||
| channel_if.m | ||
| dsp.c | ||
| dsp.h | ||
| fake.c | ||
| feeder.c | ||
| feeder.h | ||
| feeder_fmt.c | ||
| feeder_if.m | ||
| feeder_rate.c | ||
| feeder_volume.c | ||
| mixer.c | ||
| mixer.h | ||
| mixer_if.m | ||
| sndstat.c | ||
| sound.c | ||
| sound.h | ||
| vchan.c | ||
| vchan.h | ||