diff options
author | ariff <ariff@FreeBSD.org> | 2006-03-31 10:36:36 +0000 |
---|---|---|
committer | ariff <ariff@FreeBSD.org> | 2006-03-31 10:36:36 +0000 |
commit | 063f9c01c6f02b5f5b49d777a06d53627048e260 (patch) | |
tree | 007624fe74204f023a8c23288e077c892b521584 /sbin/natd | |
parent | 1aa8a677cca892a5127360be96a110c293d93f1d (diff) | |
download | FreeBSD-src-063f9c01c6f02b5f5b49d777a06d53627048e260.zip FreeBSD-src-063f9c01c6f02b5f5b49d777a06d53627048e260.tar.gz |
MEGA Fixes / Cleanup
--------------------
- 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.
Diffstat (limited to 'sbin/natd')
0 files changed, 0 insertions, 0 deletions