svn commit: r196250 - in stable/7/sys: . contrib/pf dev/sound/pci
Stanislav Sedov
stas at FreeBSD.org
Sat Aug 15 15:48:11 UTC 2009
Author: stas
Date: Sat Aug 15 15:48:10 2009
New Revision: 196250
URL: http://svn.freebsd.org/changeset/base/196250
Log:
- MFC r191308, r191310:
Properly unlock mutex on failure in channel_trigger. Before this
the function just returned with the mutex held.
Modified:
stable/7/sys/ (props changed)
stable/7/sys/contrib/pf/ (props changed)
stable/7/sys/dev/sound/pci/envy24.c
stable/7/sys/dev/sound/pci/envy24ht.c
Modified: stable/7/sys/dev/sound/pci/envy24.c
==============================================================================
--- stable/7/sys/dev/sound/pci/envy24.c Sat Aug 15 15:41:10 2009 (r196249)
+++ stable/7/sys/dev/sound/pci/envy24.c Sat Aug 15 15:48:10 2009 (r196250)
@@ -1721,6 +1721,7 @@ envy24chan_trigger(kobj_t obj, void *dat
struct sc_info *sc = ch->parent;
u_int32_t ptr;
int slot;
+ int error = 0;
#if 0
int i;
@@ -1742,8 +1743,10 @@ envy24chan_trigger(kobj_t obj, void *dat
sc->caps[0].minspeed = sc->caps[0].maxspeed = sc->speed;
sc->caps[1].minspeed = sc->caps[1].maxspeed = sc->speed;
}
- else if (ch->speed != 0 && ch->speed != sc->speed)
- return -1;
+ else if (ch->speed != 0 && ch->speed != sc->speed) {
+ error = -1;
+ goto fail;
+ }
if (ch->speed == 0)
ch->channel->speed = sc->speed;
/* start or enable channel */
@@ -1773,16 +1776,20 @@ envy24chan_trigger(kobj_t obj, void *dat
#if(0)
device_printf(sc->dev, "envy24chan_trigger(): emldmawr\n");
#endif
- if (ch->run != 1)
- return -1;
+ if (ch->run != 1) {
+ error = -1;
+ goto fail;
+ }
ch->emldma(ch);
break;
case PCMTRIG_EMLDMARD:
#if(0)
device_printf(sc->dev, "envy24chan_trigger(): emldmard\n");
#endif
- if (ch->run != 1)
- return -1;
+ if (ch->run != 1) {
+ error = -1;
+ goto fail;
+ }
ch->emldma(ch);
break;
case PCMTRIG_ABORT:
@@ -1814,9 +1821,9 @@ envy24chan_trigger(kobj_t obj, void *dat
}
break;
}
+fail:
snd_mtxunlock(sc->lock);
-
- return 0;
+ return (error);
}
static int
Modified: stable/7/sys/dev/sound/pci/envy24ht.c
==============================================================================
--- stable/7/sys/dev/sound/pci/envy24ht.c Sat Aug 15 15:41:10 2009 (r196249)
+++ stable/7/sys/dev/sound/pci/envy24ht.c Sat Aug 15 15:48:10 2009 (r196250)
@@ -1668,6 +1668,7 @@ envy24htchan_trigger(kobj_t obj, void *d
struct sc_info *sc = ch->parent;
u_int32_t ptr;
int slot;
+ int error = 0;
#if 0
int i;
@@ -1689,8 +1690,10 @@ envy24htchan_trigger(kobj_t obj, void *d
sc->caps[0].minspeed = sc->caps[0].maxspeed = sc->speed;
sc->caps[1].minspeed = sc->caps[1].maxspeed = sc->speed;
}
- else if (ch->speed != 0 && ch->speed != sc->speed)
- return -1;
+ else if (ch->speed != 0 && ch->speed != sc->speed) {
+ error = -1;
+ goto fail;
+ }
if (ch->speed == 0)
ch->channel->speed = sc->speed;
/* start or enable channel */
@@ -1720,16 +1723,20 @@ envy24htchan_trigger(kobj_t obj, void *d
#if(0)
device_printf(sc->dev, "envy24htchan_trigger(): emldmawr\n");
#endif
- if (ch->run != 1)
- return -1;
+ if (ch->run != 1) {
+ error = -1;
+ goto fail;
+ }
ch->emldma(ch);
break;
case PCMTRIG_EMLDMARD:
#if(0)
device_printf(sc->dev, "envy24htchan_trigger(): emldmard\n");
#endif
- if (ch->run != 1)
- return -1;
+ if (ch->run != 1) {
+ error = -1;
+ goto fail;
+ }
ch->emldma(ch);
break;
case PCMTRIG_ABORT:
@@ -1759,9 +1766,9 @@ envy24htchan_trigger(kobj_t obj, void *d
}
break;
}
+fail:
snd_mtxunlock(sc->lock);
-
- return 0;
+ return (error);
}
static int
More information about the svn-src-all
mailing list