Page MenuHomeFreeBSD

D47463.id146973.diff
No OneTemporary

D47463.id146973.diff

diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c
--- a/sys/dev/sound/pcm/dsp.c
+++ b/sys/dev/sound/pcm/dsp.c
@@ -177,7 +177,7 @@
d = priv->sc;
/* At this point pcm_unregister() will destroy all channels anyway. */
- if (!DSP_REGISTERED(d) || PCM_DETACHING(d))
+ if (!DSP_REGISTERED(d))
goto skip;
PCM_GIANT_ENTER(d);
@@ -264,7 +264,7 @@
return (ENODEV);
d = i_dev->si_drv1;
- if (!DSP_REGISTERED(d) || PCM_DETACHING(d))
+ if (!DSP_REGISTERED(d))
return (EBADF);
priv = malloc(sizeof(*priv), M_DEVBUF, M_WAITOK | M_ZERO);
@@ -445,7 +445,7 @@
("%s(): io train wreck!", __func__));
d = priv->sc;
- if (!DSP_REGISTERED(d) || PCM_DETACHING(d))
+ if (!DSP_REGISTERED(d))
return (EBADF);
PCM_GIANT_ENTER(d);
@@ -664,7 +664,7 @@
return (err);
d = priv->sc;
- if (!DSP_REGISTERED(d) || PCM_DETACHING(d))
+ if (!DSP_REGISTERED(d))
return (EBADF);
PCM_GIANT_ENTER(d);
@@ -1783,7 +1783,7 @@
if ((err = devfs_get_cdevpriv((void **)&priv)) != 0)
return (err);
d = priv->sc;
- if (!DSP_REGISTERED(d) || PCM_DETACHING(d)) {
+ if (!DSP_REGISTERED(d)) {
/* XXX many clients don't understand POLLNVAL */
return (events & (POLLHUP | POLLPRI | POLLIN |
POLLRDNORM | POLLOUT | POLLWRNORM));
@@ -1865,7 +1865,7 @@
if ((err = devfs_get_cdevpriv((void **)&priv)) != 0)
return (err);
d = priv->sc;
- if (!DSP_REGISTERED(d) || PCM_DETACHING(d))
+ if (!DSP_REGISTERED(d))
return (EINVAL);
PCM_GIANT_ENTER(d);
diff --git a/sys/dev/sound/pcm/mixer.c b/sys/dev/sound/pcm/mixer.c
--- a/sys/dev/sound/pcm/mixer.c
+++ b/sys/dev/sound/pcm/mixer.c
@@ -146,7 +146,7 @@
struct pcm_channel *c;
int dropmtx, acquiremtx;
- if (!PCM_REGISTERED(d) || PCM_DETACHING(d))
+ if (!PCM_REGISTERED(d))
return (EINVAL);
if (mtx_owned(m->lock))
@@ -199,7 +199,7 @@
else
return (EINVAL);
- if (!PCM_REGISTERED(d) || PCM_DETACHING(d))
+ if (!PCM_REGISTERED(d))
return (EINVAL);
if (mtx_owned(m->lock))
@@ -1053,7 +1053,7 @@
m = i_dev->si_drv1;
d = device_get_softc(m->dev);
- if (!PCM_REGISTERED(d) || PCM_DETACHING(d))
+ if (!PCM_REGISTERED(d))
return (EBADF);
/* XXX Need Giant magic entry ??? */
@@ -1209,7 +1209,7 @@
return (EBADF);
d = device_get_softc(((struct snd_mixer *)i_dev->si_drv1)->dev);
- if (!PCM_REGISTERED(d) || PCM_DETACHING(d))
+ if (!PCM_REGISTERED(d))
return (EBADF);
PCM_GIANT_ENTER(d);
@@ -1447,7 +1447,7 @@
for (i = 0; pcm_devclass != NULL &&
i < devclass_get_maxunit(pcm_devclass); i++) {
d = devclass_get_softc(pcm_devclass, i);
- if (!PCM_REGISTERED(d) || PCM_DETACHING(d)) {
+ if (!PCM_REGISTERED(d)) {
if ((mi->dev == -1 && i == snd_unit) || mi->dev == i) {
mixer_oss_mixerinfo_unavail(mi, i);
return (0);
diff --git a/sys/dev/sound/pcm/sound.h b/sys/dev/sound/pcm/sound.h
--- a/sys/dev/sound/pcm/sound.h
+++ b/sys/dev/sound/pcm/sound.h
@@ -104,17 +104,15 @@
#define SD_F_SIMPLEX 0x00000001
#define SD_F_AUTOVCHAN 0x00000002
#define SD_F_SOFTPCMVOL 0x00000004
-#define SD_F_DYING 0x00000008
-#define SD_F_DETACHING 0x00000010
-#define SD_F_BUSY 0x00000020
-#define SD_F_MPSAFE 0x00000040
-#define SD_F_REGISTERED 0x00000080
-#define SD_F_BITPERFECT 0x00000100
-#define SD_F_VPC 0x00000200 /* volume-per-channel */
-#define SD_F_EQ 0x00000400 /* EQ */
-#define SD_F_EQ_ENABLED 0x00000800 /* EQ enabled */
-#define SD_F_EQ_BYPASSED 0x00001000 /* EQ bypassed */
-#define SD_F_EQ_PC 0x00002000 /* EQ per-channel */
+#define SD_F_BUSY 0x00000008
+#define SD_F_MPSAFE 0x00000010
+#define SD_F_REGISTERED 0x00000020
+#define SD_F_BITPERFECT 0x00000040
+#define SD_F_VPC 0x00000080 /* volume-per-channel */
+#define SD_F_EQ 0x00000100 /* EQ */
+#define SD_F_EQ_ENABLED 0x00000200 /* EQ enabled */
+#define SD_F_EQ_BYPASSED 0x00000400 /* EQ bypassed */
+#define SD_F_EQ_PC 0x00000800 /* EQ per-channel */
#define SD_F_EQ_DEFAULT (SD_F_EQ | SD_F_EQ_ENABLED)
#define SD_F_EQ_MASK (SD_F_EQ | SD_F_EQ_ENABLED | \
@@ -127,26 +125,20 @@
"\001SIMPLEX" \
"\002AUTOVCHAN" \
"\003SOFTPCMVOL" \
- "\004DYING" \
- "\005DETACHING" \
- "\006BUSY" \
- "\007MPSAFE" \
- "\010REGISTERED" \
- "\011BITPERFECT" \
- "\012VPC" \
- "\013EQ" \
- "\014EQ_ENABLED" \
- "\015EQ_BYPASSED" \
- "\016EQ_PC" \
+ "\004BUSY" \
+ "\005MPSAFE" \
+ "\006REGISTERED" \
+ "\007BITPERFECT" \
+ "\010VPC" \
+ "\011EQ" \
+ "\012EQ_ENABLED" \
+ "\013EQ_BYPASSED" \
+ "\014EQ_PC" \
"\035PRIO_RD" \
"\036PRIO_WR"
-#define PCM_ALIVE(x) ((x) != NULL && (x)->lock != NULL && \
- !((x)->flags & SD_F_DYING))
-#define PCM_REGISTERED(x) (PCM_ALIVE(x) && \
- ((x)->flags & SD_F_REGISTERED))
-
-#define PCM_DETACHING(x) ((x)->flags & SD_F_DETACHING)
+#define PCM_ALIVE(x) ((x) != NULL && (x)->lock != NULL)
+#define PCM_REGISTERED(x) (PCM_ALIVE(x) && ((x)->flags & SD_F_REGISTERED))
#define PCM_CHANCOUNT(d) \
(d->playcount + d->pvchancount + d->reccount + d->rvchancount)
diff --git a/sys/dev/sound/pcm/sound.c b/sys/dev/sound/pcm/sound.c
--- a/sys/dev/sound/pcm/sound.c
+++ b/sys/dev/sound/pcm/sound.c
@@ -536,8 +536,6 @@
PCM_LOCK(d);
PCM_WAIT(d);
- d->flags |= SD_F_DETACHING;
- d->flags |= SD_F_DYING;
d->flags &= ~SD_F_REGISTERED;
PCM_ACQUIRE(d);

File Metadata

Mime Type
text/plain
Expires
Fri, Nov 28, 6:58 PM (4 h, 9 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
26295980
Default Alt Text
D47463.id146973.diff (5 KB)

Event Timeline