summaryrefslogtreecommitdiffstats
path: root/sys/dev/sound/pcm/buffer.c
diff options
context:
space:
mode:
authorcg <cg@FreeBSD.org>2002-11-25 17:17:43 +0000
committercg <cg@FreeBSD.org>2002-11-25 17:17:43 +0000
commitc9457db52b78b8fe2844cb837ee11d32cb013d0b (patch)
treeac1448d81f09f0d496c1b9ce490a1df51856353d /sys/dev/sound/pcm/buffer.c
parent79ac90c6dbdb26a4402c5fb31a4a94d6e72e133e (diff)
downloadFreeBSD-src-c9457db52b78b8fe2844cb837ee11d32cb013d0b.zip
FreeBSD-src-c9457db52b78b8fe2844cb837ee11d32cb013d0b.tar.gz
various fixes to eliminate locking warnings
Approved by: re Reviewed by: orion
Diffstat (limited to 'sys/dev/sound/pcm/buffer.c')
-rw-r--r--sys/dev/sound/pcm/buffer.c38
1 files changed, 25 insertions, 13 deletions
diff --git a/sys/dev/sound/pcm/buffer.c b/sys/dev/sound/pcm/buffer.c
index 1604b9d..d498591 100644
--- a/sys/dev/sound/pcm/buffer.c
+++ b/sys/dev/sound/pcm/buffer.c
@@ -143,7 +143,7 @@ sndbuf_resize(struct snd_dbuf *b, unsigned int blkcnt, unsigned int blksz)
b->bufsize = blkcnt * blksz;
if (b->tmpbuf)
free(b->tmpbuf, M_DEVBUF);
- b->tmpbuf = malloc(b->bufsize, M_DEVBUF, M_WAITOK);
+ b->tmpbuf = malloc(b->bufsize, M_DEVBUF, M_NOWAIT);
sndbuf_reset(b);
return 0;
}
@@ -151,26 +151,38 @@ sndbuf_resize(struct snd_dbuf *b, unsigned int blkcnt, unsigned int blksz)
int
sndbuf_remalloc(struct snd_dbuf *b, unsigned int blkcnt, unsigned int blksz)
{
+ u_int8_t *buf, *tmpbuf, *f1, *f2;
+ unsigned int bufsize;
+
if (blkcnt < 2 || blksz < 16)
return EINVAL;
- b->blkcnt = blkcnt;
- b->blksz = blksz;
+ bufsize = blksz * blkcnt;
- b->maxsize = blkcnt * blksz;
- b->bufsize = b->maxsize;
- if (b->buf)
- free(b->buf, M_DEVBUF);
- b->buf = malloc(b->bufsize, M_DEVBUF, M_WAITOK);
- if (b->buf == NULL)
+ buf = malloc(bufsize, M_DEVBUF, M_NOWAIT);
+ if (buf == NULL)
return ENOMEM;
- if (b->tmpbuf)
- free(b->tmpbuf, M_DEVBUF);
- b->tmpbuf = malloc(b->bufsize, M_DEVBUF, M_WAITOK);
- if (b->tmpbuf == NULL)
+ tmpbuf = malloc(bufsize, M_DEVBUF, M_NOWAIT);
+ if (tmpbuf == NULL) {
+ free(buf, M_DEVBUF);
return ENOMEM;
+ }
+
+ b->blkcnt = blkcnt;
+ b->blksz = blksz;
+ b->bufsize = bufsize;
+ b->maxsize = bufsize;
+ f1 = b->buf;
+ f2 = b->tmpbuf;
+ b->buf = buf;
+ b->tmpbuf = tmpbuf;
+
+ if (f1)
+ free(f1, M_DEVBUF);
+ if (f2)
+ free(f2, M_DEVBUF);
sndbuf_reset(b);
return 0;
OpenPOWER on IntegriCloud