diff options
| author | Peter Wemm <peter@FreeBSD.org> | 2000-10-18 10:39:18 +0000 |
|---|---|---|
| committer | Peter Wemm <peter@FreeBSD.org> | 2000-10-18 10:39:18 +0000 |
| commit | 93d88e0056b793f5526004753b6afef75df4dd3c (patch) | |
| tree | 1744593cde6817aa6b297503765cfeb1f5b34b69 /sys/dev/random | |
| parent | 25f3f7c530913a985a90e3913513dfc8bb57e7f8 (diff) | |
Notes
Diffstat (limited to 'sys/dev/random')
| -rw-r--r-- | sys/dev/random/randomdev.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/sys/dev/random/randomdev.c b/sys/dev/random/randomdev.c index eaa47b9ed5f79..c8d2ebac1ee8c 100644 --- a/sys/dev/random/randomdev.c +++ b/sys/dev/random/randomdev.c @@ -109,22 +109,21 @@ random_read(dev_t dev, struct uio *uio, int flag) int error = 0; void *random_buf; - if (flag & IO_NDELAY && !random_state.seeded) { - error = EWOULDBLOCK; - } - else { - if (random_state.seeded) { - c = min(uio->uio_resid, PAGE_SIZE); - random_buf = (void *)malloc(c, M_TEMP, M_WAITOK); - while (uio->uio_resid > 0 && error == 0) { - ret = read_random_real(random_buf, c); - error = uiomove(random_buf, ret, uio); - } - free(random_buf, M_TEMP); - } + while (!random_state.seeded) { + if (flag & IO_NDELAY) + error = EWOULDBLOCK; else - error = tsleep(&random_state, 0, "rndblk", 0); + error = tsleep(&random_state, PUSER|PCATCH, "rndblk", 0); + if (error != 0) + return error; } + c = min(uio->uio_resid, PAGE_SIZE); + random_buf = (void *)malloc(c, M_TEMP, M_WAITOK); + while (uio->uio_resid > 0 && error == 0) { + ret = read_random_real(random_buf, c); + error = uiomove(random_buf, ret, uio); + } + free(random_buf, M_TEMP); return error; } |
