diff options
author | cg <cg@FreeBSD.org> | 2002-11-25 17:17:43 +0000 |
---|---|---|
committer | cg <cg@FreeBSD.org> | 2002-11-25 17:17:43 +0000 |
commit | c9457db52b78b8fe2844cb837ee11d32cb013d0b (patch) | |
tree | ac1448d81f09f0d496c1b9ce490a1df51856353d /sys/dev/sound/pcm/buffer.c | |
parent | 79ac90c6dbdb26a4402c5fb31a4a94d6e72e133e (diff) | |
download | FreeBSD-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.c | 38 |
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; |